为什么
void main() {
//return void
}
坏?
前几天我输入了这个,有人向我指出这样做是错误的。我很困惑。我已经写了这样一段时间了,我知道它不是C ++标准,但是编译器没有发出任何警告。为什么这是错的?
答案 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 ++允许在使用错误构造时发生任何。所以你不能依赖编译器做“正确”的事情,因为它可能会这样做一次,而不是另一次。
通常,您希望避免未定义的行为,因此不应该这样做。