先上代碼
11 #include <stdio.h>
12
13 #define likely(x) __builtin_expect(!!(x), 1)
14 #define unlikely(x) __builtin_expect(!!(x), 0)
15
16 int main(int argc, const char* argv[]) {
17 int count = 10;
18 if (likely(count > 1))
19 printf("It is ok\n");
20 else
21 printf("It isn't ok\n");
22
23 int tmp = !!5;
24 printf("tmp = %d\n", tmp);
25
26 tmp = !!0;
27 printf("tmp = %d\n", tmp);
28 return 0;
29 }
再上輸出結(jié)果
It is ok
tmp = 1
tmp = 0
結(jié)論
1 __builtin_expect是gcc提供的膀哲,目的是為了優(yōu)化代碼
2 __builtin_expect(Exp, N)陷寝,意思是Exp == N的概率很大
3 !!的寫法泽论,是為了確保最后表達(dá)式的值 = 0 or 1