百科问答小站 logo
百科问答小站 font logo



有个人说C++程序入口是mainCRTStartup,另一个人说是main,然后打起来了,如何评理? 第1页

  

user avatar   yao-dong-27 网友的相关建议: 
      

这就像盲人摸象,一个摸着鼻子说大象又细又长像个管子,一个摸着象腿说大象又粗又硬像个柱子。

你要是个明眼人就带他们从不同角度位置再摸摸。

你要也是个盲人就别去添乱了。


user avatar   muchan-37 网友的相关建议: 
      

那要看所谓“程序入口”是什么意义上的。

如果是按标准所规定的程序语义来说:

C++17标准以前:main,毫无疑问的main,程序的初始化在语义上被视为程序开始执行前就已经完成。

A program shall contain a global function called main, which is the designated start of the program.

C++17开始:似乎没有很明确地规定,但习惯上仍认为main是入口点。标准表述为执行程序所启动的主线程会调用main函数,并“可以”(“might”)完成静态变量的初始化和摧毁。

Executing a program starts a main thread of execution in which the main function is invoked, and in which variables of static storage duration might be initialized and destroyed.

无论哪个标准:不会是mainCRTStartup。这个词在标准里就没出现过。

如果是按实际编译出的二进制文件来说:

那可就说不准了。入口可以是_mainCRTStartup,可以是_start,可以是编译选项所指定的任何名字,甚至也可以没有名字,只是由PE头/ELF头指定的一个地址。

也许严谨的说法是:在Windows平台上,使用XX版本的XX编译器,用XX编译选项编译,得到的可执行文件以_mainCRTStartup为入口。


user avatar   wu-yong-wei-99 网友的相关建议: 
      

从 C++ 的角度,说前者肯定是错的,因为 C++ 里根本没有 mainCRTStartup 这个概念。

到具体平台上,当然可以从技术角度讨论哪个函数是一个程序的入口,但这跟 C++ 语言就没啥关系了,只是个具体的实现细节问题。


user avatar   pansz 网友的相关建议: 
      

编译生成的程序与C++没有关系。

只能说「某个编译器在某个平台下生成了以mainCRTStartup为入口的机器代码」。

编译器本来就是把C++代码转化为机器码,转化为机器码之后的程序就不是C++程序了。

从C++的角度依然还是main作为入口。




  

相关话题

  现在 c++中 long 整数类型还有使用的意义吗? 
  现在快2022年了,c++为什么还要实现(.cpp)和声明(.h)分开? 
  为什么培训机构很少有培训 C 语言的,大部分都是 Java,C# 什么的? 
  c/c++怎么把一个bool数组(刚好8个元素)转换成char? 
  c++中指针的作用是什么呢?单纯的用引用不可以吗? 
  为什么说C++的main函数最后不写 return 0; 是不好的习惯? 
  如果C语言程序在一台电脑上可以运行,到另外一台就运行出问题是什么原因? 
  在c++代码中使用const关键字是不是自找麻烦? 
  C++工程中的目录有何意义? 
  C++中 int n = 0ULL - 1; 是 UB 未定义行为吗? 

前一个讨论
可以找到两个质数,他们的比值最接近 π 吗?
下一个讨论
为什么很多程序员对string的执行效率耿耿于怀?





© 2024-11-22 - tinynew.org. All Rights Reserved.
© 2024-11-22 - tinynew.org. 保留所有权利