我正在阅读GCC手册http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
我有关于builtin_expect的以下问题
long __builtin_expect(long exp,long c)
当类型应该是bool时,为什么exp类型为long?
例如:内核定义了一个宏,用于将表达式转换为bool
define possible(x)__ builtin_expect(!!(x),1)
那么为什么不定义一个接口,其中exp是bool而不是long?
1 回答
__builtin_expect
返回exp
的值,因此为了保持一致性,它应该返回与exp
相同的类型 .选择
long
(如果真的仍然如此,而且文档不仅仅缺乏)可能是历史性的 . 我对此类功能的期望是将表达式exp
在类型和值中完全保持不变 . 这个特性应该只是带有编译器提示的代码,而不是改变语义,例如exp
的类型将是unsigned long
.顺便说一下,内核宏中的表达式
!!(x)
没有类型_Bool
但是int
,这个例子只是一个特殊的用例,其中exp
只有两个结果 . 该功能本身比这更通用 .