为什么在C++中输入void main()是不好的?

4
这是一个可能的重复问题:void main和int main有什么区别? 为什么

void main() {
    //return void
}

有问题吗?

前几天我输入了这个,但有人指出这样做是错误的。我很困惑。我已经写了一段时间了,虽然我知道这不符合C++标准,但编译器并没有发出任何警告。为什么这是错的呢?


编译器没有给出任何警告?我甚至无法编译它...如果你增加警告级别,你应该至少会得到一个警告... - Manlio
增加警告级别。投票关闭。 - David Titarenco
5个回答

5

仅因为您使用的编译器未报错,并不意味着其他编译器也不会报错。毕竟,这不是标准写法...


4

这是错误的,因为它不符合标准。一个编译器可能会接受它,另一个可能会抱怨,而拘泥于标准的信徒们无论如何都会批评你。


2

每个程序都应该向其他程序指示它是否成功完成或者出现了某种错误,如果你的主函数不返回任何内容,那么你无法做到这一点。

此外,标准规定main函数应该返回一个整数。


2
因为标准(至少是C++03)规定main函数应该返回一个int类型的值(仅适用于主机环境,像嵌入式系统这样的独立环境可以随意处理)。根据《3.6.1主函数第2段》:
“实现不得预定义main函数。此函数不得重载。它应该返回一个int类型的值,但其类型由实现定义。”
“所有实现都应允许以下两种main函数定义:int main() { /* ... */ }int main(int argc, char* argv[]) { /* ... */ }。”
如果您非常重视可移植性(而且您应该),那么您应该尽可能地编写符合标准的代码。
未定义的行为如下:
x = x++ + --x;

虽然在某些情况下(无论您对“工作”的定义是什么)可能有效,但这并不意味着这是一个好主意 :-)


1

这是非标准的。

也就是说,当你写这个时,你并没有按照C++的原意来写。它可能看起来像C++,但你没有遵循规则,所以你实际上并没有在写C++。

此外,在大多数情况下,它的结果是未定义的。

与其他语言(如C++或C#)不同,"错误"行为会导致错误,在C++中,当使用错误的结构时,任何事情都可能发生。因此,你不能依赖编译器做出"正确"的事情,因为它可能有一次这样做,但另一次不这样做。

总的来说,你应该避免未定义的行为,所以你不应该这样做。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接