我知道这是超级基本的,其他一些线程已经讨论过类似的问题。但我有一本书(C的绝对初学者指南),其中所有代码都写在函数main()中。 int总是被省略了。怎么可能运行?可能是旧版本的stdio.h吗? 以下是示例代码:
#include <stdio.h>
main() // not int main()
{
printf("This is it\n");
return 0;
}
答案 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
,如果没有,则行为定义如上。