为啥我们需要在 C++ 中使用 `int main` 而不是 `void main`? [复制]

Posted

技术标签:

【中文标题】为啥我们需要在 C++ 中使用 `int main` 而不是 `void main`? [复制]【英文标题】:Why do we need to use `int main` and not `void main` in C++? [duplicate]为什么我们需要在 C++ 中使用 `int main` 而不是 `void main`? [复制] 【发布时间】:2010-10-01 18:44:08 【问题描述】:

为什么我们需要在 C++ 中使用 int main 而不是 void main

【问题讨论】:

【参考方案1】:

简短的回答是因为 C++ 标准要求 main() 返回 int

您可能知道,main() 函数的返回值被运行时库用作进程的退出代码。 Unix 和 Win32 都支持进程完成后从进程返回的(小)整数的概念。从main() 返回一个值为程序员提供了一种指定该值的方法。

【讨论】:

这有点晚了,但我以为C标准只定义了int main()和int main(int argc, char *argv[])。 C 标准允许将main 定义为int main(void)int main(int argc, char *argv[]) 或等效项,或“或以某种其他实现定义的方式”。 C++ 标准的要求类似,但必须将main() 定义为始终 以返回int。 (这仅适用于托管环境;独立(即嵌入式)系统可以以任何他们喜欢的方式定义程序的入口点。) “简短”的答案实际上是唯一的答案。允许void main() ... 是非常有意义的;您仍然可以使用exit() 将退出代码返回到环境,或者如果您到达main 的末尾,则只需默认为0。不使用void main() 的原因是语言标准不允许它,就像它允许double main(long long foo, time_t bar) 一样。【参考方案2】:

大多数操作系统会向用户或调用进程报告应用程序是否成功。这在脚本编写中特别有用,其中脚本可以根据程序的结果有条件地分支(if-then)。大致如下:

// pseudo-code
screenscrape  http://mydatasource.com > results.txt
if errorlevel == 0 then
   processfile results.txt
else
   echo Screen Scraping Failed!
end if

这个结果状态是通过main的返回值来完成的。

虽然一些编译器允许使用 void main,但为了一致性和简单性,ANSI 标准需要一个 main 原型:

int main(int argc, char *argv[]);

因为在 C 中,参数是由调用者清理的,所以 main 的作者可以忽略声明或处理参数 argc 和 argv。但是,如果调用 main 的设置例程期望一个 int 返回值,但没有找到,则行为可能是未定义的。

简答:

main 的返回值很有用 用于编写脚本。 调用 main 的设置和清理例程需要使用一致的接口。

【讨论】:

我喜欢你的解释。您能否提供一个工作示例[一个实际工作的脚本]【参考方案3】:

就像在 C 中一样,因为进程会给操作系统一个退出代码。

你可以使用

int main (int argc, char ** argv)

  return (0);

int main (int argc, char ** argv)

  exit (0);

这至少在 C89 IIRC 中。

【讨论】:

【参考方案4】:

因为 int 是程序可以返回给操作系统的返回码。

您可以查询该值来检查操作是否成功。

这在使用命令行脚本时非常有用。

【讨论】:

它仍然很有帮助。命令行脚本并没有死,你知道吗? ;-)【参考方案5】:

来自***:

从主函数返回的值成为进程的退出状态,尽管 C 标准仅将特定含义赋予两个值:EXIT_SUCCESS(传统上为零)和EXIT_FAILURE。其他可能的返回值的含义是实现定义的。

【讨论】:

【参考方案6】:

也许是因为使用main() 方法中的状态码干净地退出是有意义的。在 Java 中,我们必须使用 System.exit() 来模拟它,这并不是那么优雅。

【讨论】:

【参考方案7】:

当我们执行我们的程序来检查它是否运行成功。因此,当它返回 0 表示它为 true 并成功运行,如果它返回 1 则它没有成功运行 & 这个 int 值告诉操作系统程序是否成功运行

【讨论】:

【参考方案8】:

改变的主要原因

void main()

int main()

在以后的版本中是为了通知程序在执行期间发生的错误到运行它的操作系统

return 0;

如果返回任何数字而不是0,则表明程序成功执行,这意味着发生了一些错误,错误代码是main返回的。 如果您在 codeblock IDE 上运行,请在构建日志中查看如果 main 返回 0 它通常会显示

Process terminated with status 0

否则它会以红色显示状态代码,这意味着发生了错误

【讨论】:

谢谢..很好的解释

以上是关于为啥我们需要在 C++ 中使用 `int main` 而不是 `void main`? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

为啥我们在 C++ 中使用 pos?假设我的代码 int pos = cHash(symbol);

为啥 C++ 中的 main() 不能内联?

为啥c#中的main方法总是放在类中而不是c++中

为啥在 C++ 中的类中不需要“&”引用?

int main() 是不是需要在 C++ 上声明?

为啥 main(int argc, char* argv[]) 需要两个参数? [复制]