档案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()在静态库中,例如:

文件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。

最佳答案

使用警告进行编译,编译器将告诉您为什么它是错误的。

您没有函数call的原型,因此当您从main调用它时,它会得到一个隐式的int返回类型,而不是它实际返回的类型。

关于c - 为什么静态库函数的值错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21779883/

10-13 09:11