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.

定义