编译时会发生什么:
int main;
它不应该是main()并导致错误吗?
我尝试在CodeBlocks中编译代码并且编译完美而没有错误。
答案 0 :(得分:7)
这不是错误,因为C源文件不需要main
函数,只要您不尝试定义它,就可以将main
定义为您想要的任何内容在相同的范围内。因为这是你的整个程序,所以没关系 - 但程序肯定无法正常运行,因为没有main
函数可供查找。
所有这一切都是声明一个名为main的全局(外部)变量,初始化为0.链接器通常会发出错误,如果它不存在,但它可能会满足外部变量的存在(我希望它假设它是指针)。
编辑:我用调试器稍微研究了一下,果然,main
的值为0,即该变量被用作没有强制转换的指针。因此初始化代码尝试运行位于地址0的函数,从而在我的平台上产生段错误。
答案 1 :(得分:3)
由于范围不正确(或缺乏理解),我认为你在这里感到困惑。
当你在这里说编译器正在传递int main;
的声明时,我假设你在函数范围内声明它。但是,如果您尝试在全局范围内声明它,则编译器将抛出重新定义错误。
因此,只要您在同一范围内没有两个相同的标识符,编译器就会满意并让您按照自己的方式使用。
以下代码将给出重新定义错误:
int main;
int main()
{
printf("In main\n");
}
下面的代码不会,因为main的范围仅限于函数内部,编译器会考虑int main
变量,结果打印为5。
int main()
{
int main = 5;
printf("In main, value of main is %d\n", main);
}
以下代码会打印主
的地址int main()
{
printf("In main, value of main is %d\n", main);
}
修改强>
阅读完评论后,我觉得这里的关键问题是你根本没有主要功能,你应该为“C”程序开始工作。如果你没有main函数,只是声明一个int main;
变量,你的代码仍然可以编译,但是当你执行时会出现混乱和混乱,因为main是一个整数变量,而它应该是一个功能。但是,只要你按照我的上述答案控制你的主人,你应该没事。
你可以去this链接,它解释了编译和执行C程序的概念