是否可以查看内置函数定义

Is it possible to see builtin function definition?

本文关键字:内置 函数 定义 是否      更新时间:2023-10-16

这纯粹是好奇,我正在使用一个cmath函数,即cos,随便什么。查看 cmath 标头后,我看到了这样的事情:

 inline _GLIBCXX_CONSTEXPR float
  acos(float __x)
  { return __builtin_acosf(__x); }

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

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