为什么main()不需要返回类型(比如int),即使它返回一个intiger?

#include main() { // // return 0; } 

我的意思是,即使我没有指定它的返回类型,上面的代码也没有显示任何错误。 (简单地说是’main’而不是’int main’)。

这是旧式语法(前C89),其中函数的默认返回类型为int

AFAIK它现在已被弃用,因此您应始终提供返回类型。

5.1.2.2.1程序启动

程序启动时调用的函数名为main 。 该实现声明此函数没有原型。 它应该使用返回类型int并且没有参数来定义

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

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

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

等效的; 10)或其他一些实现定义的方式。

编译它没有返回类型,编译器应该抛出一个警告:

 [Warning] return type defaults to 'int' [enabled by default] 

从1989/1990 C标准开始,没有指定返回类型的函数隐式返回int

从1999 C标准开始,已经删除了“implicit int ”规则,并且必须使用显式返回类型。 (编译器可能不会拒绝违反此规则的程序;通常它们只会发出警告;您仍应该更正它。)

即使您使用的是C99之前的编译器,仍应指定返回类型。

mainfunction正确定义为:

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

或者作为

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

或等效的(或以其他一些实现定义的方式,但很少有充分的理由使用除这两种forms之外的任何其他forms)。

(是的,你应该使用(void)而不是() 。是的, main的返回类型是int ,而不是void ,尽管有些人因某种原因允许它。)

由于向下兼容,我们在程序中使用int main() 。 我认为int main()main()之间没有太大区别。 main()在一些较旧的编译器中很有用。 现在,我们应该在main()函数之前使用返回类型。