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

可能重复:
c中main(void)和main()之间的区别

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

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

我认为c89标准将允许main(),但c99及以上不会。 否则你必须使用int main()

main()工作但很混乱,在C中main函数总是返回一个int来指定退出状态,所以正确的语法是int main() ,但是如果你不打扰设置退出状态那么main()就足够了,但好的C书总是有int main()

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

从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中有效,但这是实现定义的。

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