2012-06-16 67 views
1

在阅读K & R第二版时,我注意到程序总是以 “main(){”开头。我一直认为main()在它之前必须有int或void。所以它看起来像“int main()”或“void main()”。什么是“main()”,有什么区别?为什么c允许main(),即使它不是int main()或void main()?

+0

可能重复的[C函数的语法,之后的参数列表中声明的参数类型(http://stackoverflow.com/questions/1585390/c-function-syntax-参数类型声明后参数列表) – dirkgently

+2

'无效main()'是根本错误的。 – asaelr

回答

7

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) { ... } 
+1

请注意,空括号表示*任何类型的任何数量的参数*,而'void'表示0参数。 –

+0

啊,是的,忘了提到这一点。改变。 – adelbertc

+0

@Cicada:这不完全正确。空括号仅仅是避免原型化函数,因此具有错误数量参数的调用不会违反约束条件。但是,在函数定义中,它仍然定义了一个没有参数的函数,并且即使在调用函数时包含参数不会违反约束(因为在范围中没有原型),它仍然会调用未定义的行为发生。 –

-3

语法大部分的时间依赖于编译。例如,当你使用visual C++的时候,你写的是“void main”,但是当你使用GCC的时候,你应该写“int main()”,然后如果程序完成或者不好,返回0或者1。

0

因为这是由旧版本的c支持。

main() 

相当于

int main() 
相关问题