在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
,如果没有它,则行为定义如上。