当我编译int main时真正发生了什么; 在C.

Tha*_*vas 5 c codeblocks

编译时真正发生了什么:

int main; 
Run Code Online (Sandbox Code Playgroud)

它不应该是main()并导致错误吗?

我试图在CodeBlocks中编译代码,它编译完美而没有错误.

tep*_*pic 7

这不是错误,因为C源文件不需要具有main函数,main只要您不尝试在同一范围内定义它两次,就可以定义为您想要的任何内容.因为这是你的整个程序,所以很好 - 但程序当然无法正常运行,因为没有main找到的功能.

它所做的就是声明一个名为main的全局(外部)变量,初始化为0.链接器通常会发出错误,如果它不存在,但它可能会满足外部变量的存在(我希望它假设它是一个指针) .

编辑:我用调试器调查了一下,果然,main值为0,即变量被用作没有强制转换的指针.因此初始化代码尝试运行位于地址0的函数,从而在我的平台上产生段错误.