2013-05-30 69 views
1

在我的對話框控件的慣例是:混合兩種#定義成一個字

#define DLG_NAME    1 
#define DLG_NAME_CONTROL_NAME 2 

我想建立一個函數,它會知道該控件的名稱,並已獲得定義的值。
很明顯,我不能寫int i = DLG_NAME + _ + CONTROL_NAME

那麼我怎麼能混合第一個#define和另一個文本來獲得第二個#define值?

+0

足夠接近:http://stackoverflow.com/questions/6503586/what-does-in-a-define-mean?lq=1 – chris

+0

正如chris建議的那樣,您可以使用'##'運算符來組合宏名。但是,我不明白你想達到什麼。你想獲得'1_2'作爲標識符嗎? (它不是一個有效的)。 –

+0

不,我希望預處理器將轉換'int i = DLG_NAME_CONTROL_NAME'。 – Aharon

回答

3

我猜,你正在尋找的是:

#define DLG_NAME_FIRST_COMBO 2  
#define CONTROL_NAME(x) DLG_NAME_##x 

int i = CONTROL_NAME(FIRST_COMBO); 

您在您的評論建議的方法是不行的,因爲宏表達式是不是一個定義之外重新評估。

+0

參數化宏有什麼問題? – Matthias