【问题标题】:warning: return type defaults to ‘int’ [-Wreturn-type]警告:返回类型默认为'int' [-Wreturn-type]
【发布时间】:2012-09-04 14:37:32
【问题描述】:

我是一名开始学习 C 的 Linux 用户,我正在尝试编译我输入的源代码:

#include <stdio.h>
main()
{
        float c,d;
        c = 10215.3;
        d = c / 3;
        printf("%3.2f\n",d);
        return 0;
}

它使用我编写的 makefile 编译:

cc -Wall -g     printf.c   -o printf

但我收到此警告:

printf.c:2:1: 警告:返回类型默认为'int' [-Wreturn-type]

它编译代码并得到所需的输出,但我想了解这意味着什么

【问题讨论】:

  • 第一个问题很好,在格式方面做得很好。欢迎!

标签: c compiler-warnings


【解决方案1】:
main()

应该是

int main()

在 C89 中,默认返回类型假定为 int,这就是它起作用的原因。

【讨论】:

  • @DanielFischer 不知道这一点。已更正。谢谢!
  • 有效,不再有警告。我理解我的错误。谢谢!
  • 没问题。现在您可能会添加编译器默认使用 C89 方言,显然 :)
  • 哦 C89 我读到了一些关于那个的东西 :) 那个数字。很高兴知道:)
  • 有人会引用标准并确认C99不允许吗? :-)
【解决方案2】:

在 C89 中,默认返回类型是 int。此默认值在 C99 中已删除,编译器会提醒您在 ma​​in() 之前没有 int 的 C 样式已过时。

参见 C89 规范第 3.5.2 节“类型说明符”:

  • “每个类型说明符列表应为以下集合之一:[...] + int, signed, signed int,或没有类型说明符”。

  • 在语义的第二段中:“每个 [...] 集合指定相同的类型,除了位域 [blabla]”。所以这意味着“无类型说明符”与 int 相同。

在 C99 中,删除了“或无类型说明符”部分。 (但你仍然可以写 signed 没有 int 部分。)

【讨论】:

    【解决方案3】:

    解决方案:您在哪里定义了您的功能。您必须决定变量的数据类型

    int function(n)
    

    应该是:

    int function(int n)
    

    在 C89 中,默认返回类型是 int。此默认值在 C99 中已删除,编译器会提醒您在 main() 之前没有 int 的 C 样式已过时。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2020-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      相关资源
      最近更新 更多