为什么静态库函数的值错误?

时间:2014-02-14 12:49:14

标签: c linux static-libraries

文件a.c:

#include<stdio.h>

int main(int argc, const char *argv[])
{
    double r = 0;
    r = call(10.0,2.0);
    printf("r:%lf\n",r);
    return 0;
}

函数call()位于静态库中,如:

file call.c

#include<stdio.h>

double call(double a,double b){
    double c;
    c = a + b;
    printf("c :%lf\n",c);
    return c;
}

我使用的命令是

gcc -c call.c -o call.o

ar rcs libcall.a call.o

gcc -o a a.c -lcall -L.

那为什么结果不是12?如果我将double类型更改为int类型,则结果为12。

2 个答案:

答案 0 :(得分:7)

编译警告,编译器会告诉你它为什么错。

你没有函数call的原型,所以当你从main调用它时,它会得到一个隐含的int返回类型,它不是它实际返回的内容。< / p>

答案 1 :(得分:2)

编写C程序时,使用C编译器进行编译。它确实解决了很多问题。

gcc -c call.c -o call.o -std=c99 -pedantic-errors -Wall