函数实际上返回什么“警告:类型默认为'int'”?

时间:2019-03-29 14:06:33

标签: c function types return warnings

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

尝试编译这两个文件时遇到警告,我知道这是因为我一开始没有指定bar函数的类型。但是我想弄清楚默认int返回类型返回的值实际代表了什么。我试图更改bar函数的内容,包括参数和函数主体的数量(例如添加一些短语句),但是我没有找到返回值的任何规则。

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

1 个答案:

答案 0 :(得分:0)

函数返回的类型和函数返回的值是分开的东西。

extern bar();中,您尚未声明要返回void的函数,这意味着什么都不会返回。这意味着它将返回某些内容,并且由于C语言的历史,其返回类型默认为int

使用这样的声明,函数应该返回一个int值(如果使用了它的返回值)。

在此代码中:

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

您不返回任何值。没有return语句。但是,您的main例程中使用了返回值。所得行为未由C标准定义。 C标准中没有规定要发生的事情。