在C和C++中定义main()函数的正确(最有效)方法是什么?int main()或void main()-为什么?那争论呢?如果int main(),则返回1或0?


这个问题有很多重复之处,包括:

C的main()函数的有效签名是什么?main()函数的返回类型void main()和int main()之间的区别?main()在C中的签名++main()的正确声明是什么?-对于C++,确实有一个非常好的答案。C中main()函数的样式C中main()方法的返回类型C中的int main()与void main()

相关:

C++-int main(int argc,char**argv)C++-int main(int argc,char*argv[])char*envp[]作为main()的第三个参数是否可移植?int main()函数必须在所有编译器中返回值吗?为什么C和C++中main()函数的类型留给用户定义?为什么int main(){}编译?C++14中main()的合法定义?


当前回答

在Windows上,如果程序因访问冲突而崩溃,则退出代码将为STATUS_access_violation(0xC0000005)。类似于x86异常导致的其他类型的崩溃。

因此,除了从main返回或传递到exit之外,还有其他东西可以导致退出代码被看到。

其他回答

请记住,即使您返回的是int,某些OS(Windows)也会将返回的值截断为单个字节(0-255)。

我认为main()应该返回EXIT_SUCCESS或EXIT_FAILURE。它们在stdlib.h中定义

C89中的main()和K&R C未指定的返回类型默认为“int”。

return 1? return 0?

如果不在int main()中编写return语句,则默认情况下关闭的}将返回0。

(仅在c++和c99以后的版本中,对于c90,您必须编写return语句。请参阅为什么main不在此处返回0?)

父进程将接收返回0或返回1。在shell中,它会进入一个shell变量,如果您以shell形式运行程序而不使用该变量,则不必担心main()的返回值。

参见如何获取主函数返回的内容?。

$ ./a.out
$ echo $?

这样您可以看到它是变量$?它接收main()返回值的最低有效字节。

在Unix和DOS脚本中,成功时返回0,错误时返回非零。这是Unix和DOS脚本用来发现程序发生了什么并控制整个流程的标准。

在C和C++中定义main()函数的正确(最有效)方法是什么?int main()或void main()-为什么?

这些词“(最有效)”并不能改变问题。除非您处于独立的环境中,否则有一种普遍正确的方法来声明main(),那就是返回int。

main()在C和C++中应该返回什么?

一个int,纯粹而简单。它不仅仅是“应该返回什么”,而是“必须返回什么”。main()当然是其他人调用的函数。您无法控制调用main的代码。因此,必须使用类型正确的签名声明main以匹配其调用者。你在这件事上没有任何选择。你不必问自己什么效率更高或更低,什么风格更好或更差,或者诸如此类的问题,因为答案已经由C和C++标准完美地定义了。跟着他们就行了。

如果int main(),则返回1或0?

0表示成功,非零表示失败。同样,这不是你需要(或得到)选择的东西:它是由你应该遵守的接口定义的。

返回什么取决于您要对可执行文件执行什么操作。例如,如果您使用带有命令行shell的程序,则需要返回0表示成功,返回非零表示失败。然后,您就可以根据代码的结果在shell中使用带有条件处理的程序。此外,您还可以根据您的解释分配任何非零值,例如,对于严重错误,不同的程序退出点可以终止具有不同退出值的程序,调用shell可以通过检查返回的值来决定要做什么。如果代码不打算与shell一起使用,并且返回的值不会影响任何人,那么可以省略它。我个人使用签名int main(void){..return 0;..}