在C中:main()和int main()之间的区别

时间:2012-11-24 17:04:02

标签: c

  

可能重复:
  difference between main(void) and main() in c

我知道这是超级基本的,其他一些线程已经讨论过类似的问题。但我有一本书(C的绝对初学者指南),其中所有代码都写在函数main()中。 int总是被省略了。怎么可能运行?可能是旧版本的stdio.h吗? 以下是示例代码:

#include <stdio.h>

main()  // not int main()
{
printf("This is it\n");
return 0;
}

3 个答案:

答案 0 :(得分:3)

我认为c89标准将允许 main() ,但c99及更高版本不允许。您必须使用 int main()

答案 1 :(得分:1)

main()有效,但令人困惑,在C中,main函数总是返回一个int,指定退出状态,所以正确的语法是int main(),但如果你不打扰设置退出状态然后main()就够了,但好的C书总是有int main()

答案 2 :(得分:1)

这些问题依赖于高度标准版本,因此一般性答案没有多大意义。

从C89草案(如果官方C89标准不同,请更正我,它不能自由开发):

  

程序启动时调用的函数名为main。   该实现声明此函数没有原型。   它可以不带参数定义:

     

int main(void) { /*...*/ }

     

或者有两个参数(这里称为argc和argv,虽然可以使用任何名称,因为它们是声明它们的函数的本地名称):

     

int main(int argc, char *argv[]) { /*...*/ }

C99和C11标准说的相同,但他们在和:

添加了一些东西
  

[...]

     

或等同物; [9]或其他一些实施定义的方式。

     

[9]因此,int可以被定义为int的typedef名称替换,或者argv的类型可以写为char ** argv,依此类推。

一般来说,未从标准定义的内容会导致未定义的行为,因此代码在C89 / C90中是UB,而在C99和C11中可能有效,但是&#39;实施定义。

P上。 S。:正如您所看到的,您还应该在参数列表中添加void,如果没有,则行为定义如上。