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


#include<stdio.h>
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标准开始,"隐式int"规则已被删除,显式返回类型是强制性的。(编译器可能不会拒绝违反此规则的程序;通常他们只是发出警告;您仍应更正它。

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

main函数正确定义为:

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

或作为

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

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

(是的,您应该使用 (void) 而不是 () 。是的,main的返回类型是 int ,而不是void,尽管有些人出于某种原因允许这样做。

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

最新更新