【问题标题】:Why main() does not need a return type(say int), even when it return an intiger? [duplicate]为什么 main() 不需要返回类型(比如 int),即使它返回一个整数? [复制]
【发布时间】:2014-03-11 03:04:23
【问题描述】:
#include<stdio.h>
main()
{
 //
 //
return 0;
}

我的意思是,即使我没有指定它的返回类型,上面的代码也没有显示任何错误。 (只需“main”而不是“int main”)。

【问题讨论】:

  • @jerry:我不认为这是重复的。这个问题与返回类型无关(main(),在 C99 之前,指定返回类型为 int)。这个问题是关于“隐式int”规则的。
  • @jerry:我刚刚投票决定将其作为该问题的副本关闭——尽管在某种意义上它是相反的(这问为什么没有警告;另一个问为什么有警告)。不过,两者的答案基本相同。

标签: c return return-type


【解决方案1】:

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

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

【讨论】:

  • 隐含的int 规则被 1989 ANSI C 标准(以及等效的 1990 ISO C 标准)保留。它被 1999 年的 ISO C 标准删除。 (依赖它从来都不是一个特别好的主意。)
【解决方案2】:

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]

【讨论】:

    【解决方案3】:

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

    从 1999 C 标准开始,“隐式int”规则已被删除,并且显式返回类型是强制性的。 (编译器可能不会拒绝违反此规则的程序;他们通常只是发出警告;您仍然应该更正它。)

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

    main 函数正确定义为:

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

    或作为

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

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 这几乎完全不正确。 main() 是旧形式; int main() 始终是合法的,int main(void) 是 1989 年标准的首选形式。详情请见my answer。
      • 是的,你是对的。我答错了。
      • 如果你愿意,你可以删除你的答案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-08
      • 2016-06-08
      • 2020-06-27
      • 1970-01-01
      • 2020-06-05
      • 2015-10-16
      相关资源
      最近更新 更多