这是在C中声明int main()的好习惯?
int main(){
stuff;
return 0;
}
或
int main(){
stuff;
}
我尝试过在互联网上搜索,其中大多数都不清楚,有些人提到了编译器的东西。我知道函数应该返回一些东西。但是,两者都在我的计算机上完全正常。有关此主题的任何帮助将不胜感激。
由于许多程序员使用第二种样式,导致向系统报告未指定的退出状态,因此 C 标准委员会决定,如果控件在没有return
语句的情况下离开其主体,则隐式返回0
main
。此行为由 C 标准 C99 及更高版本强制要求。因此,恕我直言,return 0;
可以省略
的最好仍然是明确的。但请注意,缩进函数体中的语句也被认为是好的风格:
int main() {
stuff;
return 0;
}
另请注意,C 标准记录了 2 个可能的main
原型:
int main(void);
和
int main(int argc, char *argv[]);
或等效变体:
int main(int argc, char **argv[]);
int main(const int argc, char ** const argv);
等。
支持省略您在两个示例中编写的参数列表,并且等效于 C++ 中的int main(void)
,但在 C 中并不完全等效: 这意味着参数列表未指定,因此编译器无法检查传递给main
的参数,如果它在程序中遇到对main
的调用, 它不能执行适当的转换。
在这种情况下,这并不重要,因为示例中的main
函数不使用它们的参数,并且实际上看起来比int main(void)
更一致,因为参数确实是由启动代码传递给它的。
两者都可以工作,因为main
很特别。编译的代码没有区别。该标准保证,如果main
在没有显式返回值的情况下终止,则返回 0。
但最好是显式并返回 0。
对于怀疑论者,摘自C标准条款5.1.2.2.3(程序终止):
从对
main
函数的初始调用返回等效于使用 main 函数返回的值作为其参数调用exit
函数;到达终止 main 函数的}
返回值 0。
通常不允许控制流到达非 void 函数的末尾而不返回某些内容。主函数的处理方式不同。请参阅以下文档第 59 页和第 62 页
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2960.pdf:
如果控件到达 main 的末尾而没有遇到 return 语句,则效果是执行返回 0;