Gcc使用sqrt而不包括math.h

任何人都知道为什么这个c程序编译并使用math.h的sqrt?

这将输出2.236068

main.c中

#include  #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

gcc执行优化,它期望标准库函数的行为与标准所说的一样,即将调用C标准库转换为更高效的机器代码。 例如,gcc可能会为你的sqrt()调用发出一条fsqrt指令,从不调用你的自定义sqrt()

您可以通过提供-fno-builtin来关闭此行为,以便为所有已识别的函数关闭此优化,或者通过提供-fno-builtin- function来仅关闭此function优化。 例如, -fno-builtin-sqrt会使gcc尊重您的非标准sqrt()