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

时间:2012-03-25 00:55:18

标签: c++ standards

  

可能重复:
  Difference between void main and int main?

为什么

void main() {
    //return void
}

坏?

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

5 个答案:

答案 0 :(得分:4)

因为您使用的编译器没有错误输出,所以并不意味着其他编译器也不会。毕竟你知道它不标准......

答案 1 :(得分:2)

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

另外,标准说main应该返回一个int。

答案 2 :(得分:2)

完全错误因为它不是标准的。一个编译器可能接受这个,另一个可能会抱怨,并且迂腐的信徒无论如何都会焚烧你的屁股。

答案 3 :(得分:1)

这是错误的,因为标准(至少C ++ 03)声明main应该返回int(对于托管环境,即 - 像嵌入式系统这样的独立环境可以很好地做任何他们想做的事情)。来自3.6.1 Main function, paragraph 2

  

实现不应预定义主函数。此功能不应过载。它的返回类型应为int类型,否则其类型为实现定义。

     

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

如果你完全重视可移植性(你应该),你应该尽可能地编写符合标准的代码。

未定义的行为,如:

x = x++ + --x;
在某些情况下,

可能有用(对于你所拥有的“工作”的任何定义),这不是一个好主意: - )

答案 4 :(得分:1)

这是非标准的。

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

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

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

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