I was going through the GCC manual http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html
I had the following question about builtin_expect
long __builtin_expect (long exp, long c)
Why is the exp of long type when the type should have been bool ?
For example:The kernel defines an macro for converting the expression to bool
define likely(x) __builtin_expect(!!(x), 1)
Then why not define an interface in which exp is bool rather than long ?