25

我是一名开始学习 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]

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

4

3 回答 3

35
main()

应该

int main()

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

于 2012-09-11T15:50:58.837 回答
4

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

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

  • “每个类型说明符列表应为以下集合之一:[...] + intsignedsigned int无类型说明符”。

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

在 C99 中,删除了“或无类型说明符”部分。(但您仍然可以在没有int部分的情况下编写签名。)

于 2015-07-28T10:13:50.130 回答
0

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

int function(n)

应该:

int function(int n)

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

于 2020-12-23T14:11:36.333 回答