繁体   English   中英

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

[英]What really happen when I compile int main; in C

编译时真正发生了什么:

int main; 

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

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

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

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

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

由于范围不正确(或缺乏理解),我认为你在这里感到困惑。

当你在这里说int main;的声明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);
}

但是下面的代码将打印main的地址

int main()
{
       printf("In main, value of main is %d\n", main);
}

编辑:阅读完评论后,我觉得这里的关键问题是你根本没有主要功能,你应该为“C”程序开始工作。 如果你没有main函数,只是声明一个int main; 变量,你的代码可能仍然可以编译,但是当你执行时会出现混乱和混乱,因为main是一个整数变量,而它应该是一个函数。 但是,只要你按照我的上述答案控制你的主人,你应该做得很好。

你可以去这个链接,它解释了编译和执行C程序的概念

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM