【发布时间】:2017-07-28 18:51:07
【问题描述】:
Clang 和 GCC 定义了一堆内置函数,我这里用剩余的例子:
__builtin_sqrt(x)
但是,标准 C99 在 math.h 中定义了以下内容
sqrt(x)
clang 为已经存在的方法定义内置函数有什么意义?我原以为像 sqrt 这样的常见数学函数会被后端优化,所以实际上并不需要内置函数。由于显而易见的原因,此内置函数的可移植性不如标准 c。
【问题讨论】:
-
你不应该直接使用 __builtin_sqrt。您应该使用 sqrt。编译器将识别出 sqrt 是它知道的函数并将其替换为 __builtin_sqrt。在实现这一点时,gcc 没有内部函数的概念,它只有内置函数,用户可以使用,所以 __builtin_sqrt 最终在用户代码中工作,但这是一个历史事故。
-
@MarcGlisse 为什么不直接使用呢?甚至没有
#ifdefs 来获得编译器特定的内置函数?如果没有,为什么不呢? -
@jdk1.0 为什么在标准代码等效的情况下使用更长的、不可移植的代码?
标签: c++ gcc clang intrinsics