C 函数阴影:为什么这个例子不起作用?
C function shadowing: why does this example not work?
通过试验这个简单的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double sin (double i){
printf("Yes!\n");
return 0.;
}
int main() {
printf("Do I run my version of sin()?: %lf\n", sin(1));
return 0;
}
我希望通过我的版本找到函数 sin "shadowed",例如在这个线程 (Overriding C library functions, calling original) 中描述的那样。
令人惊讶的是(以我的观点),当我编译时,gcc example.c
,(与gcc example.c -lm
相同的效果)我只是获得了sin的数学值。请问这是什么原因?我应该更改什么才能使用我的定义?
这个问题旨在更好地理解语言;我不是要解决任何具体的实际问题。
sin
是一个 C 标准库函数,编译器可以用内置函数替换它。
对于 gcc,它是 __builtin_sin
。使用 -fno-builtin-sin
进行编译,以便能够提供您自己的 sin
.
定义
通过试验这个简单的代码:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double sin (double i){
printf("Yes!\n");
return 0.;
}
int main() {
printf("Do I run my version of sin()?: %lf\n", sin(1));
return 0;
}
我希望通过我的版本找到函数 sin "shadowed",例如在这个线程 (Overriding C library functions, calling original) 中描述的那样。
令人惊讶的是(以我的观点),当我编译时,gcc example.c
,(与gcc example.c -lm
相同的效果)我只是获得了sin的数学值。请问这是什么原因?我应该更改什么才能使用我的定义?
这个问题旨在更好地理解语言;我不是要解决任何具体的实际问题。
sin
是一个 C 标准库函数,编译器可以用内置函数替换它。
对于 gcc,它是 __builtin_sin
。使用 -fno-builtin-sin
进行编译,以便能够提供您自己的 sin
.