【发布时间】:2017-02-17 04:37:46
【问题描述】:
在 C 中可以使用 main() 代替 int main(),但这是 outdated practice。但是我看到人们在 C++ 中使用 main() 而不是 int main()。如果他们使用main(),他们的意思是void main(),就像this question一样吗?
【问题讨论】:
-
AFAIK,它是非标准的,如果您的警告足够高,将导致编译错误。我想编译器出于遗留原因支持它,例如 C++ 与 ANSI C 兼容这一事实,当时需要支持没有初始
int的遗留 C 代码,所以它可能级联到现代C++ 编译器。但这都是我的猜测,我可能错了。 -
如果来自C,则隐式返回类型为
int,而不是void,因此比void main更正确。不过还是很丑;自第一个 ANSI C 标准以来,隐式返回类型就被人们所反对。 -
即使在 C 中,现代 C 编译器在向后兼容模式下工作时也只接受
main()而不是int main()。 GCC 5.x 及更高版本默认为 C11 模式,其中“plainmain()”是不可接受的,而 GCC 4.x 及更早版本默认为 C90 模式,这是可以的。自 90 年代初以来,它(普通的main())在“标准”(严格)C++ 中一直不好用。一些编译器可能仍然允许它(同样,出于向后兼容性的原因),但它并不好。因此,任何用现代代码编写简单的main()的人都做错了。在旧代码中遇到普通main()的任何人都应该更新它。 -
@ShadowRanger 这就是我的想法,但我可能认为使用
main()可能意味着 C++ 中的一些新内容,例如void main()。在 Internet 上找不到 C++ 中的隐含含义。 -
不,在 GCC 和 Clang 等编译器下,这是对 C++ 的扩展,以保留旧的 C 行为。不像
void main这样的变化。
标签: c++