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

时间:2018-01-12 10:31:06

标签: c++ built-in

这是纯粹的好奇心,我使用的是cmath函数,即cos,无论如何。 在查看了cmath标题后,我看到了这样的事情:

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

还有那个" __ builtin __"并且我没有找到谷歌的任何来源。 我有兴趣看到他们如何实现数学函数的源代码,我的意思是我猜他们使用泰勒和东西,但我想看看他们是如何做到的。它是出于专有原因隐藏还是可以找到?

1 个答案:

答案 0 :(得分:3)

GCC __builtin_ functions不是实际的函数,也就是说,它们并没有真正声明和实现,而是由编译器检测并映射到某些实现。请参阅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源代码树中找到类似的代码:{x 3}}位于x86中的acosf.c