我知道当前的C++标准特例处理main
函数,让其在结尾处没有显式返回也可以与return 0;
一样正常运行,而不是产生未定义的行为。
最近我看到了一个在codereview上的例子,评论中不仅指出包含最终的return 0;
是可选的,甚至还把它从原始代码中删除了。
那么我想问,将return 0;
放在main函数的末尾是否真的被认为是不好的编程风格?支持或反对的理由是什么?
我知道当前的C++标准特例处理main
函数,让其在结尾处没有显式返回也可以与return 0;
一样正常运行,而不是产生未定义的行为。
最近我看到了一个在codereview上的例子,评论中不仅指出包含最终的return 0;
是可选的,甚至还把它从原始代码中删除了。
那么我想问,将return 0;
放在main函数的末尾是否真的被认为是不好的编程风格?支持或反对的理由是什么?
来自C ++,3.6.1 主函数
(3.6.1/5)实现不得预定义main函数。此函数不得重载。它必须有一个返回类型为int的返回类型,但其类型是实现定义的。所有实现都应允许以下两个main的定义:
int main() { /* ... */ }
和
int main(int argc, char * argv []) { /* ... */ }
因此,在C ++中,main
函数有两种明显的签名:int main()
和int main(int argc, char ** argv)
进一步地,在C ++中,3.6.1主函数
(3.6.1/5)在主函数中的返回语句会导致离开主函数(销毁任何自动存储期间的对象),并调用exit,并将返回值作为参数。如果控制在未遇到return语句的情况下到达main的末尾,则效果相当于执行return 0;
因此,尽管函数的签名表明应该返回某个整数,但不必要return 0
。默认情况下,C++认为返回值为0。
优点:
- 将main
视为普通函数,并遵循类似的C++编码约定
- return 0
明确指定正常返回值,在其他情况下我们可以返回非零值
虽然所有这些都是编码约定的问题。 这仍然是程序员的选择!
int main(int argc, const char **argv, const char **env)
。 - user6266288main
视为普通函数并遵循类似的 C++ 编程规范。这是程序员的选择”。不是很有价值的内容... - Lightness Races in Orbit
main
函数没有返回任何有意义的内容,那么我不会随意添加它(为什么要麻烦呢?当你没有任何有意义的东西可返回时,为什么要给人留下这样的印象呢?)。如果main
函数返回成功或失败,则我总是使用EXIT_SUCCESS/EXIT_FAILURE
。我永远不会将其添加到一个微不足道的代码示例中,因为你唯一需要关注的是所讨论的问题。 - Galik