以 __builtin
开头的函数,这些函数是 GCC 编译器提供的一些内建函数,用于实现一些简单且快捷的功能,同时也可以用来优化编译结果。让我为您介绍一下其中一些常见的 __builtin
函数及其作用:
-
__builtin_ctz(x)
/__builtin_ctzll(x)
:- 返回括号内数的二进制表示中末尾 0 的个数。
- 例如,
__builtin_ctz(8)
返回 3,因为 8 的二进制表示为1000
,末尾有 3 个 0。
-
__builtin_clz(x)
/__builtin_clzll(x)
:- 返回括号内数的二进制表示中前导 0 的个数。
- 例如,
__builtin_clz(8)
返回 28,因为 8 的二进制表示为0000 0000 0000 0000 0000 0000 0000 1000
,整型 (int) 为 32 位,有 28 个前导 0。 - 如果使用长整型 (long long),可以使用
__builtin_clzll(8)
,它返回 60,因为长整型 (long long) 为 64 位,有 60 个前导 0。
-
__builtin_popcount(x)
:- 返回括号内数的二进制表示中 1 的个数。
- 例如,
__builtin_popcount(15)
返回 4,因为 15 的二进制表示为1111
,其中 1 的个数为 4。
-
__builtin_parity(x)
:- 判断括号中数的二进制表示中 1 的个数的奇偶性。
- 如果 1 的个数为偶数,返回 0;如果为奇数,返回 1。
- 例如,
__builtin_parity(15)
返回 0,因为 15 的二进制表示为1111
,1 的个数为 4(偶数个)。
-
__builtin_ffs(x)
:- 返回括号中数的二进制表示中最后一个 1 在第几位(从后往前算)。
- 例如,
__builtin_ffs(8)
返回 4,因为 8 的二进制表示为1000
,最后一个 1 在第四位。
-
__builtin_sqrt(x)
/__builtin_sqrtf(x)
:- 快速开平方。
- 例如,
__builtin_sqrt(16)
返回 4。 - 这两个函数与标准库的
sqrt()
函数类似,但更快。__builtin_sqrt()
是 8 位,而__builtin_sqrtf()
是 4 位。
这些 __builtin
函数在编写代码时非常有用,可以提高效率并简化操作。
GCC 提供了一些内置函数,这些函数不是标准 C 或 C++ 函数,而是编译器自带的特殊功能。这些内置函数可以帮助优化代码、检查代码正确性等。以下是一些常见的 GCC 内置函数:
- func:返回当前函数的名称(C99 标准)。
- FUNCTION:与 func 相同,为了向后兼容旧版本的 GCC。
- PRETTY_FUNCTION:在 C++ 中,返回函数的签名和名称,而在文件范围内(或 C++ 的命名空间范围内),返回字符串 “top level”。
这些标识符是变量,而不是预处理宏,不能用于初始化字符数组或与字符串字面量连接。
数学库函数:
- 数学函数(如三角函数、指数函数、对数函数等)位于 libm.so 库文件中。
- 在使用这些数学函数时,需要在 GCC 命令行中加上 -lm 选项,以告知编译器在该库文件中查找数学函数。