"warning: type defaults to ‘int’" 实际上 return 的功能是什么?

what does a "warning: type defaults to ‘int’" function actually return?

foo.c:3:8: warning: type defaults to ‘int’ in declaration of ‘bar’ [-Wimplicit-int]

我在尝试编译这两个文件时遇到警告,我知道这是因为我一开始没有指定bar函数的类型。但是我想弄清楚默认的 int return 类型 returned 的值实际上代表了什么。我试着改变bar函数的内容,包括参数个数和函数体(比如加一些短语句),但是没找到return值的规律。

foo.c

#include<stdio.h>

extern bar();

int main()
{
        int a = 4;
        int ret = bar(a);
        printf("ret = %d\n",ret);
        return 0;
}

bar.c

#include<stdio.h>

void bar(int a)
{
        printf("a = %d\n",a);
}

已编译 gcc -o fb foo.c bar.c

结果

a = 4
ret = 6

函数 return 的类型和函数 return 的值是不同的。

extern bar(); 中,您尚未将函数声明为 return void,这意味着没有任何 returned。这意味着它 return 是某种东西,并且由于 C 语言的历史,它 return 的类型默认为 int.

有了这样的声明,函数 应该 return 一个 int 值,如果它的 return 值被使用。

在此代码中:

void bar(int a)
{
        printf("a = %d\n",a);
}

你没有return一个值。没有 return 声明。但是 return 值用于您的 main 例程。 C 标准未定义由此产生的行为。 C 标准中没有规定会发生什么。