#define likely(x) __builtin_expect(!!(x), 1) #define unlikely(x) __builtin_expect(!!(x), 0)
有人會問,為什麼上面實現使用!!,其實這樣起到了類型轉化的作用,把非bool型的數據,轉化成了bool型,從而實現比較。
likely:x == 1
unlikely: x== 0
測試程序如下:
#include <stdio.h> int main(){ int test_int = 100; printf("%d\n",test_int); printf("%d\n",!test_int); printf("%d\n",!!test_int); test_int = -100; printf("%d\n",test_int); printf("%d\n",!test_int); printf("%d\n",!!test_int); test_int = 0; printf("%d\n",test_int); printf("%d\n",!test_int); printf("%d\n",!!test_int); }
輸出結果:
本欄目更多精彩內容:http://www.bianceng.cn/OS/Linux/