当我写一个空的主要时,为什么没有警告?

Mes*_*sop 1 c c++ g++ visual-studio

如果我编写类似下面的程序,g ++和visual studio有礼貌地警告我从不使用局部变量a:

int main()
{
    int a; // An unused variable? Warning! Warning!
}
Run Code Online (Sandbox Code Playgroud)

如果我删除未使用的变量(以使编译器满意),它将给我以下程序:

int main()
{
    // An empty main? That's fine.
}
Run Code Online (Sandbox Code Playgroud)

现在,我留下了一个无用的程序.

也许我错过了一些东西,但是,如果一个未使用的变量足以引发警告,为什么一个空程序可以正常?

上面的例子非常简单.但在现实生活中,如果我有一个空主要的大程序(因为我忘了把任何东西放进去).然后发出警告应该是一件好事,不是吗.

也许我错过了g ++或visual studio中的一个选项,它可以在main为空时引发警告/错误?

orl*_*rlp 7

原因很简单,如果没有return语句,main则隐式返回EXIT_SUCCESS,如标准所定义.

所以空主要没问题,不需要返回,不需要函数调用,什么都不需要.


回答为什么海湾合作委员会不警告你的问题是因为警告可以帮助你解决常见的错误.保留未使用的变量可能会导致混淆错误,并导致代码膨胀.

然而,完全忘记写一个主要功能并不是一个常见的错误,除了初学者之外的任何东西并不值得警告(因为它完全合法).

  • @Catcall:在C99之前,C没有来自`main`的隐式返回.当您使用`gcc`时,您将代码编译为C,因此会发出警告. (3认同)