Gcc使用sqrt而不包括math.h

Sni*_*pet 6 c gcc

任何人都知道为什么这个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;
}
Run Code Online (Sandbox Code Playgroud)

math_utils.h

#ifndef MATH_UTILS_Hs
#define MATH_UTILS_Hs

double sqrt(double number){
  return number + 5;
}

#endif // MATH_UTILS_Hs
Run Code Online (Sandbox Code Playgroud)

我目前正在Windows上使用mingw GCC

fuz*_*fuz 9

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

您可以通过提供-fno-builtin为所有已识别的功能关闭此优化或仅提供关闭此优化来关闭此行为.例如,会让gcc尊重你的非标准.-fno-builtin-functionfunction-fno-builtin-sqrtsqrt()