C语言 为什么静态库函数中的值是错误的



file a.c :

#include<stdio.h>
int main(int argc, const char *argv[])
{
    double r = 0;
    r = call(10.0,2.0);
    printf("r:%lfn",r);
    return 0;
}

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

文件调用.c

#include<stdio.h>
double call(double a,double b){
    double c;
    c = a + b;
    printf("c :%lfn",c);
    return c;
}

我使用的命令是

gcc -c call.c -o call.o
ar rcs libcall.a call.o
gcc -o a a.c -lcall -L.

那么为什么结果不是 12 呢?如果我将双精度类型更改为 int 类型,结果为 12。

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

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

编写 C

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

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

最新更新