C int main()与int main(void)

时间:2015-10-08 09:24:08

标签: c main c99 c11

据我所知,C99要求int main(void)符合C11标准。因此int main()对于此标准中的主要功能不正确。

但是哪个C(不是C ++)标准允许主函数的int main()定义?

感谢并尊重Alex

3 个答案:

答案 0 :(得分:2)

我个人显然更喜欢带(void)的版本,因为用原型声明函数通常更好。但是int main() { ... }形式也是正确的,只要你在定义而不是声明中使用它,实际上C标准在许多例子中都使用了这个形式。

这里定义并声明了一个没有原型的函数,但对于一个定义,很明显该函数没有接收任何参数。

如果您尝试提供main的前向声明,则不应使用该表单,因为如果您错误地调用该函数,则不会发出警告。这里C和C ++也不同,因为C允许你自己调用main,甚至是递归地调用C ++禁止这样的事情。

答案 1 :(得分:1)

根据C89(http://web.archive.org/web/20030222051144/http://home.earthlink.net/~bobbitts/c89.txt),main方法以两种方式定义

int main(void)
{
    // ...
}

int main(int argc, char *argv[])
{
    // ...
}

据我所知这是第一个标准定义,所以我认为int main()只能在C ++标准中很好地定义。

但是,我仍然使用它:)

答案 2 :(得分:0)

如果您仍然不确定在其他答案之后要使用什么,我建议您为空参数定义:

#if 0
 #define NO_PARAM
#else
 #define NO_PARAM void
#endif

如果是主要功能,你可以写

int main(NO_PARAM){
...
}

如果您稍后改变主意,您可以简单地使用首选定义,而无需手动更改所有功能签名(没有参数)。