在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()的合法定义?


当前回答

如果您确实存在与从进程返回整数的效率相关的问题,那么您可能应该避免多次调用该进程,从而导致返回值成为问题。

如果你这样做(多次调用一个进程),你应该找到一种方法将你的逻辑直接放在调用者内部,或者放在一个DLL文件中,而不需要为每个调用分配一个特定的进程;在这种情况下,多个流程分配会带来相关的效率问题。

详细地说,如果您只想知道返回0是否比返回1更有效,在某些情况下,它可能取决于编译器,但一般来说,假设它们是从相同的源(本地、字段、常量、嵌入代码中的、函数结果等)读取的,则需要完全相同的时钟周期数。

其他回答

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

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

返回0应告诉程序员程序已成功完成作业。

如果您确实存在与从进程返回整数的效率相关的问题,那么您可能应该避免多次调用该进程,从而导致返回值成为问题。

如果你这样做(多次调用一个进程),你应该找到一种方法将你的逻辑直接放在调用者内部,或者放在一个DLL文件中,而不需要为每个调用分配一个特定的进程;在这种情况下,多个流程分配会带来相关的效率问题。

详细地说,如果您只想知道返回0是否比返回1更有效,在某些情况下,它可能取决于编译器,但一般来说,假设它们是从相同的源(本地、字段、常量、嵌入代码中的、函数结果等)读取的,则需要完全相同的时钟周期数。

操作系统可以使用返回值来检查程序是如何关闭的。

返回值0通常意味着大多数操作系统(我无论如何都能想到的操作系统)正常。

当您自己调用进程时,也可以检查它,看看程序是否退出并正确完成。

这不仅仅是一个编程惯例。