任何人都知道为什么这个c程序编译并使用math.h的sqrt?
这将输出2.236068
的main.c
#include <stdio.h>
#include "math_utils.h"
int main(void){
printf("%f\n", sqrt(5));
return 0;
}
math_utils.h
#ifndef MATH_UTILS_Hs
#define MATH_UTILS_Hs
double sqrt(double number){
return number + 5;
}
#endif // MATH_UTILS_Hs
我目前正在Windows上使用mingw GCC
答案 0 :(得分:9)
gcc执行优化,它希望标准库函数的行为与标准所说的一样,即将调用C标准库转换为更高效的机器代码。例如,gcc可能会针对您的fsqrt
来电发出一条sqrt()
条指令,而根本不会调用您的自定义sqrt()
。
您可以通过提供-fno-builtin
来关闭所有已识别的功能来关闭此优化,或者仅提供-fno-builtin-function
来关闭function
的此优化,从而关闭此行为。例如,-fno-builtin-sqrt
会使gcc尊重您的非标准sqrt()
。