是否可以看到内置函数定义?

She*_*eed 3 c++ built-in

这纯粹是好奇心,我正在使用 cmath 函数,即 cos 等。查看 cmath 标头后,我看到了这样的事情:

 inline _GLIBCXX_CONSTEXPR float
  acos(float __x)
  { return __builtin_acosf(__x); }
Run Code Online (Sandbox Code Playgroud)

还有“__builtin__”,我在谷歌上找不到任何来源。我有兴趣查看他们如何实现数学函数的源代码,我的意思是我猜他们使用泰勒之类的东西,但我想看看他们是如何做到的。它是由于专有原因而隐藏还是可以找到?

jde*_*esa 5

GCC__builtin_函数不是实际的函数,也就是说,它们并不是在任何地方真正声明和实现的,而是由编译器检测到并映射到某个实现。参见builtins.hbuiltins.cbuiltins.def。很难追踪实际实现所在的位置,但这些数学函数似乎取自您正在使用的libc的实现。例如,深入挖掘GLibc源代码,我们可以找到至少几种实现__ieee754_acosf(似乎是别名并被其他函数包装),一种是用 C 语言实现,另e_acosf.c一种是用 x86 汇编语言实现a_acosf.S(备份链接,因为这些是非官方的 GitHub 镜像))。你可以说可读性并不是他们的首要任务。您可以在musl libc源代码树中找到类似的代码:C 中的acosf.c和 x86 中的acosf.se_acosf.c e_acosf.S