1
在我的對話框控件的慣例是:混合兩種#定義成一個字
#define DLG_NAME 1
#define DLG_NAME_CONTROL_NAME 2
我想建立一個函數,它會知道該控件的名稱,並已獲得定義的值。
很明顯,我不能寫int i = DLG_NAME + _ + CONTROL_NAME
。
那麼我怎麼能混合第一個#define
和另一個文本來獲得第二個#define
值?
在我的對話框控件的慣例是:混合兩種#定義成一個字
#define DLG_NAME 1
#define DLG_NAME_CONTROL_NAME 2
我想建立一個函數,它會知道該控件的名稱,並已獲得定義的值。
很明顯,我不能寫int i = DLG_NAME + _ + CONTROL_NAME
。
那麼我怎麼能混合第一個#define
和另一個文本來獲得第二個#define
值?
我猜,你正在尋找的是:
#define DLG_NAME_FIRST_COMBO 2
#define CONTROL_NAME(x) DLG_NAME_##x
int i = CONTROL_NAME(FIRST_COMBO);
您在您的評論建議的方法是不行的,因爲宏表達式是不是一個定義之外重新評估。
參數化宏有什麼問題? – Matthias
足夠接近:http://stackoverflow.com/questions/6503586/what-does-in-a-define-mean?lq=1 – chris
正如chris建議的那樣,您可以使用'##'運算符來組合宏名。但是,我不明白你想達到什麼。你想獲得'1_2'作爲標識符嗎? (它不是一個有效的)。 –
不,我希望預處理器將轉換'int i = DLG_NAME_CONTROL_NAME'。 – Aharon