Posted by: kevinlin on: 四月 5, 2006
要介紹的第二個使用技巧是
利用二進位運算式得到編譯時期常數
另外一個特殊運算元是##
這個運算元能讓你把兩個參數連接起來,如下所示:
#define cat(a,b) a ## b
value = cat (1,2);
錢至處理器會把上面這行轉成
value=12;
雖然說這個簡單的例子沒有什麼實際的用處(demo用而已),但是可以看見##運算元確實有一些很有趣的用處。常在微軟的一些程式中會發現,可見他有時還蠻實用的。下面的技巧就可以讓你利用二進位運算式建立編譯時期的常數。這裡特別有趣的是所有下面的程式碼都是在前至處理器裡面處理的,沒有一行執行時的程式碼。
/*
//Usage
const int nibble = BINARY1(0101); // 0×5
const int byte = BINARY2(1010,0101); // 0xa5
// 0xa5a5a5a5
const int dword = BINARY8(1010,0101,1010,0101,1010,0101,1010,0101);
*/
//Macro source:
#define HEX_DIGIT_0000 0
#define HEX_DIGIT_0001 1
#define HEX_DIGIT_0010 2
#define HEX_DIGIT_0011 3
#define HEX_DIGIT_0100 4
#define HEX_DIGIT_0101 5
#define HEX_DIGIT_0110 6
#define HEX_DIGIT_0111 7
#define HEX_DIGIT_1000 8
#define HEX_DIGIT_1001 9
#define HEX_DIGIT_1010 a
#define HEX_DIGIT_1011 b
#define HEX_DIGIT_1100 c
#define HEX_DIGIT_1101 d
#define HEX_DIGIT_1110 [...]
最近的回應