C中的int main()vs void main()

mad*_*adU 33 c int program-entry-point void

在C中,我知道int main()返回一个int,其中void main()没有.除此之外,他们之间有区别吗?第一个好于第二个?

det*_*tly 22

绝大多数时候,您需要使用其中一种int main(void)或者int main(int argc, char* argv[])您需要使用的.特别是,如果你在写这将是任何一个主要的编译器的个人电脑上运行的编译,拥有整套的C标准库,程序,那么你几乎肯定需要将返回一个intmain.

(我也会避免使用空参数列表,请参阅" 为什么我们不在main中使用(void)? ")

C99标准确实允许其他实现定义的签名,你可以使用这些如果你读过你的编译器手册和它说,你可以.

(5.1.2.2.1)它应定义为返回类型为int且没有参数......或具有两个参数......或者以某种其他实现定义的方式定义

就个人而言,即使他们允许(如果可能的话),我也会避开它们,因为如果你需要移植到另一个系统,还有一件事要担心.

请参阅下面的评论" 为什么我们不在主要使用(无效)? "进行一些有趣的讨论.


Mar*_*ett 5

如果你的书说它void main()非常过时,是由白痴(或两者)写的

编辑:好的,除非你是一个非常不可能的系统,你有一个独立的主体 - 请参阅为什么C和c ++中的主函数的类型留给用户定义?

  • 请说明一些相同的原因,因为它对包括我在内的其他人有帮助 (5认同)
  • 什么书?问题中没有关于一本书的内容. (5认同)
  • @TJCrowder - 我假设OP没有自己发明void main().有一个受欢迎的C参考书由我不会命名的作者(因为他的名字从地狱召唤恶魔)使用void main()和许多其他错误 (5认同)
  • `void main()`没有过时; 这是错的.它在早期版本的C标准中没有任何效果. (2认同)
  • 这里也有很多不正确的评论。[研究这个](/sf/answers/2188415561/)。main() 的实现定义形式在 C 和 C++ 中一直被允许用于独立系统(一些困惑的人,如 Bjarne Stroustrup 错误地声称不然,因为他们不知道 C 和 C++ 标准中独立章节的存在分别)。根据 C99 及更高版本,托管系统也允许实现定义的表单。 (2认同)