首页 文章

为什么builtin_expect采用long而不是bool?

提问于
浏览
1

我正在阅读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 回答

  • 0

    __builtin_expect 返回 exp 的值,因此为了保持一致性,它应该返回与 exp 相同的类型 .

    选择 long (如果真的仍然如此,而且文档不仅仅缺乏)可能是历史性的 . 我对此类功能的期望是将表达式 exp 在类型和值中完全保持不变 . 这个特性应该只是带有编译器提示的代码,而不是改变语义,例如 exp 的类型将是 unsigned long .

    顺便说一下,内核宏中的表达式 !!(x) 没有类型 _Bool 但是 int ,这个例子只是一个特殊的用例,其中 exp 只有两个结果 . 该功能本身比这更通用 .

相关问题