为什么在C++中键入void main()不好

Why is it bad to type void main() in C++

本文关键字:main 不好 void C++ 为什么      更新时间:2023-10-16

可能重复:
void main和int main之间的区别?

为什么

void main() {
    //return void
}

糟糕?

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

因为您使用的编译器不会出错,这并不意味着其他编译器不会出错。你知道这不是标准的,毕竟。。。

这是错误的,因为它不是标准的。一个编译者可能会接受这一点,另一个可能会抱怨,而迂腐的信徒无论如何都会把你的屁股烧在木桩上。

因为每个程序都应该向其他程序指示它是否成功完成,或者是否存在某种错误,如果main没有返回任何内容,就不能这样做。

此外,标准规定main应该返回一个int。

这是错误的,因为标准(至少是C++03)规定main应该返回int(对于托管环境,也就是说,像嵌入式系统这样的独立环境可以很好地执行它们想要的任何操作)。来自3.6.1 Main function, paragraph 2:

实施不应预先定义主要功能。此功能不应过载。它应该有一个int类型的返回类型,但除此之外,它的类型是实现定义的。

所有实现都应允许对main进行以下定义:int main() { /* ... */ }int main(int argc, char* argv[]) { /* ... */ }

如果您重视可移植性(而且您应该),那么您应该编写尽可能符合标准的代码。

未定义的行为,如:

x = x++ + --x;

在某些情况下也可以工作(无论你有什么"工作"的定义),这并不是一个好主意:-)

这是非标准的。

当你写这篇文章时,你不是在写"C++"(正如它所设想的那样)。它可能看起来像C++,但你没有遵守规则,所以你实际上并不是在写C++。

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

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

通常,您希望避免未定义的行为,因此不应该这样做。