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
函数返回的类型和函数返回的值是不同的东西。
在extern bar();
中,您尚未声明函数返回void
,这意味着不会返回任何内容。这意味着它返回一些内容,并且由于C语言的历史,它返回的类型默认为int
。
如果使用这样的声明,函数应该返回int
值,如果使用它的返回值。
在这段代码中:
void bar(int a)
{
printf("a = %d\n",a);
}
你没有返回一个值。没有return
声明。但是返回值用于你的main
例程。产生的行为不是由C标准定义的。对于将会发生什么,C标准中没有规则。