2014-02-14 28 views
-1

文件AC:为什么静态库函数的值错误?

#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.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.

+1

显示一些输出。 – Ari

+2

如果这是你的整个代码,它是否编译?它没有声明你的'call'函数 – Ari

回答

7

编译时会发出警告,编译器会告诉您为什么它是错误的。

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

2

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

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