外部文件中的C函数无法正常返回?

时间:2017-05-19 17:38:10

标签: c linker linker-errors

我有一个简单的C程序,有两个文件:main.c和test.c。

的main.c

#include <stdio.h>
int main(){
    printf ("%f\n", test());
    return 0;
}

test.c的

double test(){
    return 2.5;
} 

然后我使用命令gcc main.c test.c编译代码。当我运行它时,程序输出0.000000。不像我预期的那样2.500000。我不知道为什么。

当我在同一个文件中定义test()main()时,我没有遇到此问题。如果我在double test();的主函数上方声明main.c,我也不会遇到此问题。 表示我还能在float test();中声明main.c,在这种情况下,即使声明与定义不匹配,编译器也不会发出警告,程序错误地输出0.000000

我认为我不了解的是链接过程是如何工作的,以及在其他文件中定义的变量和函数的真正范围规则是什么。

1 个答案:

答案 0 :(得分:0)

你需要告诉main返回什么test()。 “%lf”也是双打。

#include <stdio.h>

double test();

int main(){
    printf ("%lf\n", test());
    return 0;
}

否则,编译器将错误地假设它返回int(并将返回值的位模式解释为int)。如果指定float(再次,错误),则编译器将尝试将返回的double的位模式解释为float。