C - 函数是否应该特别在 main() 声明中返回一些东西?



这是在C中声明int main()的好习惯?

int main(){
stuff;
return 0;
}

int main(){
stuff;
}

我尝试过在互联网上搜索,其中大多数都不清楚,有些人提到了编译器的东西。我知道函数应该返回一些东西。但是,两者都在我的计算机上完全正常。有关此主题的任何帮助将不胜感激。

由于许多程序员使用第二种样式,导致向系统报告未指定的退出状态,因此 C 标准委员会决定,如果控件在没有return语句的情况下离开其主体,则隐式返回0main。此行为由 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;

相关内容

  • 没有找到相关文章

最新更新