2011-02-16 84 views
2

我無法理解如何預處理器可行,什麼不可行的##代表在這個特殊的例子預處理#定義

#include <stdio.h> 

#define TEMP_KEY(type,Key) (TEMP_##type | Key) 

enum TEMPKey_Type 
{ 
    TEMP_UNKNOWN = 0, 
    TEMP_SPECIAL , 
    TEMP_UNICODE 
}; 

enum Actual_Key 
{ 
    TEMP_RIGHT = TEMP_KEY(UNKNOWN,0x1), 
    TEMP_LEFT = TEMP_KEY(SPECIAL,0x1), 
    TEMP_UP = TEMP_KEY(UNICODE,0x1) 
}; 

int main() 
{ 
    printf("\n Value of TEMP_RIGHT : %d ",TEMP_RIGHT); 
    printf("\n Value of TEMP_LEFT : %d ",TEMP_LEFT); 
    printf("\n Value of TEMP_UP : %d ",TEMP_UP); 

    return 0; 
} 

請問這個 #define TEMP_KEY(type,Key) (TEMP_##type | Key) 工作或如何以及究竟是TEMP_##type通過在取代預處理?

回答

4

「##」表示連接。因此TEMP_RIGHT = TEMP_KEY(UNKNOWN,0x1)變得TEMP_RIGHT = TEMP_UNKNOWN | 0x1,(「TEMP_」和「未知」連接在一起)

+1

*字符串*串連,這。也稱爲「膠水」。 – 2011-02-16 15:44:16

+0

行了謝謝 – Totie 2011-02-16 15:49:35

2

##是在#define指令並置運算符。

例如,TEMP _ ##類型TEMP_KEY(UNICODE,爲0x1)調用生成下一個代碼:

(TEMP_UNICODE | 0x1)