首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C int main()与int main(void)

C int main()与int main(void)
EN

Stack Overflow用户
提问于 2015-10-08 17:24:08
回答 3查看 1.3K关注 0票数 4

据我所知,int main(void)是C99和C11标准所要求的。因此,int main()对于此标准中的主函数是不正确的。

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

感谢并问候Alex

EN

回答 3

Stack Overflow用户

发布于 2015-10-08 17:37:47

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

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

如果您试图给出main的转发声明,则不应该使用该形式,因为如果错误地调用了函数,将不会出现任何警告。在这里,C和C++也是不同的,因为C允许你自己调用main,即使是递归的,而C++禁止这样的事情。

票数 4
EN

Stack Overflow用户

发布于 2015-10-08 18:04:41

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

代码语言:javascript
运行
复制
int main(void)
{
    // ...
}

代码语言:javascript
运行
复制
int main(int argc, char *argv[])
{
    // ...
}

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

但是,我仍然使用它:)

票数 1
EN

Stack Overflow用户

发布于 2015-11-02 22:09:17

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

代码语言:javascript
运行
复制
#if 0
 #define NO_PARAM
#else
 #define NO_PARAM void
#endif

在main函数的情况下,您可以编写

代码语言:javascript
运行
复制
int main(NO_PARAM){
...
}

如果你后来改变了主意,你可以简单地使用首选的定义,而不需要手动更改所有的函数签名-这些签名应该没有参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33011668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档