如何调用我自己的`tan`函数实现,而不是math.h中定义的函数?

时间:2016-02-15 23:18:05

标签: c linker

我尝试调用我自己的tan函数实现,但是我的gcc只调用math.h中定义的那个(即libm.a' s)。假设我有main.c调用tan

#include <stdio.h>
#include <math.h>

double tan(double);

main(){
printf ("Hello, %g\n ", tan(1.0));

}

以及实施foo.c

tan
double tan(double x){
   return 1000.9999;
}

然后我将两者联系起来,期望输出为1000.9999

gcc main.c foo.c; ./a.out

但我明白了:

Hello, 1.55741

其中1.55741应该是tanh(1)由math.h计算,而不是foo.c中定义的那个。我如何以这样一种方式链接main.c和foo.c,以便&#39; tan&#39;在foo.c中被调用? (在这里,我不打算改变其他名称。)

[编辑]关于我的编译器:我使用的是gcc版本4.8.2(Ubuntu 4.8.2-19ubuntu1)

1 个答案:

答案 0 :(得分:4)

-fno-builtin传递给编译器调用。默认情况下,gcc使用一种优化,其中标准库函数被特殊指令替换,期望他们做他们应该做的事情。

要关闭该优化,请通过-fno-builtin将所有功能关闭,或-fno-builtin-function仅关闭function,例如-fno-builtin-tan关闭tan功能的优化。

根据您的平台,您可能还需要不包含<math.h>。该标头可能包含名为tan的宏或内联定义,这可能会导致您观察到的问题。