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()
。