在阅读K & R第二版时,我注意到程序总是以 “main(){”开头。我一直认为main()在它之前必须有int或void。所以它看起来像“int main()”或“void main()”。什么是“main()”,有什么区别?为什么c允许main(),即使它不是int main()或void main()?
回答
main()
是老K & [R风格的地方,如果没有指定int
被省略返回类型默认为int
(你应该指定它)。此外,空圆括号在K & R风格,以显示它不需要参数..在C99中,现在应该是void
来表明这种情况。空括号表示函数将接受任意类型的任意数量的参数,这显然不是您想要的。所以,最后的结果是:
int main(void) { ... }
main()
应该返回int
..惯例说在最后一个return 0;
声明将有助于指示,该方案成功执行来电者 - 非0的返回值指示异常终止。
对你的问题更直接的回答是main() { ... }
的作品,因为它没有错。编译器发现main
函数没有声明返回类型,所以它默认为int
。空括号表示main
可以接受任意类型的任意数量的参数,这也是错误的。然而,以符合C99的风格/标准,使用
int main(void) { ... }
请注意,空括号表示*任何类型的任何数量的参数*,而'void'表示0参数。 –
啊,是的,忘了提到这一点。改变。 – adelbertc
@Cicada:这不完全正确。空括号仅仅是避免原型化函数,因此具有错误数量参数的调用不会违反约束条件。但是,在函数定义中,它仍然定义了一个没有参数的函数,并且即使在调用函数时包含参数不会违反约束(因为在范围中没有原型),它仍然会调用未定义的行为发生。 –
语法大部分的时间依赖于编译。例如,当你使用visual C++的时候,你写的是“void main”,但是当你使用GCC的时候,你应该写“int main()”,然后如果程序完成或者不好,返回0或者1。
因为这是由旧版本的c支持。
main()
相当于
int main()
的
- 1. 为什么人们在C++中使用`main()`而不是`int main()`?
- 2. int main()和void main()如何工作
- 3. 为什么int main(){return main(); }导致stackoverflow而不是尾递归?
- 4. int main(void)给出错误
- 5. int main()和int main(void)之间的区别?
- 6. int main(void)在C++中有效吗?
- 7. 为什么C++没有在启动双重main()或类似的,只有int/void main()?
- 8. 什么是错误的void main()?
- 9. 为什么'的main(){的putchar(&main);}`输出`×`
- 10. c#中static void main(string [] args)和static void main()之间的区别?
- 11. C main vs Java main
- 12. 不是允许在main方法声明
- 13. 没有main()即使main()存在
- 14. 使用int而不是字符串:public static void main(int [] args)
- 15. C++ void返回类型main()
- 16. auto main() - > int是什么意思?
- 17. 为什么使用def main()?
- 18. main()递归调用main() - gdb backtrace不显示多个main()帧 - 为什么?
- 19. main()中的'i'类型。为什么它是一个int&?
- 20. 在D中使用`void main`
- 21. void main和int之间的区别主
- 22. C中的main(void)和main()之间的区别
- 23. Hello.c:函数'main':Hello.c:13:warning:'main'的返回类型不是'int'?
- 24. C#static void Main不应该公开吗?
- 25. 重新定义int main()C++
- 26. 在C:主()和int main()的
- 27. 为什么在Python中使用“if __name __ =='__ main__':main()”而不是简单的“main()”?
- 28. main()返回什么?
- 29. 与main()相当的Objective-C是什么?
- 30. 为什么main不被声明为extern
可能重复的[C函数的语法,之后的参数列表中声明的参数类型(http://stackoverflow.com/questions/1585390/c-function-syntax-参数类型声明后参数列表) – dirkgently
'无效main()'是根本错误的。 – asaelr