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