0
比方說,我有一個#define RTR r2
聲明。是否有可能來檢查值RTR
宏?我期待這樣的事情:是否可以使用C預處理器檢查已定義語句的值?
#if RTR == r1 || RTR == r2
It is router1 or router2!
#endif
我想這是不可能的..
比方說,我有一個#define RTR r2
聲明。是否有可能來檢查值RTR
宏?我期待這樣的事情:是否可以使用C預處理器檢查已定義語句的值?
#if RTR == r1 || RTR == r2
It is router1 or router2!
#endif
我想這是不可能的..
讓我們來看看GCC documentation:
[在 '#如果'] 表達是整數類型的C表達式,受到嚴格的限制。它可能包含
- [...]
- 宏。在表達式值的實際計算開始之前,表達式中的所有宏都被展開。 使用已定義的運營商,它可以讓你檢查是否宏在「#如果」中間定義。
- 標識符不在宏,這些都被認爲是數爲零。這使您可以編寫#if MACRO而不是#ifdef MACRO,如果您知道MACRO定義時總是具有非零值。沒有函數調用括號的函數式宏也被視爲零。
因此,根據最後一點,除非r1
ANS r2
是宏(或整型常量)自己在你的榜樣,條件
#if RTR == r1 || RTR == r2
等同於
#if RTR == 0 || RTR == 0
我猜這不是理想的行爲。爲了這個工作,你應該分配一個整數常量值(或者一個表達式,在編譯時計算爲整數常量)。
BTW,你應該給當預處理宏這樣短的名字RTR
,因爲它是非常容易的東西發生衝突必須非常小心。
有此https://gcc.gnu.org/onlinedocs/cpp/If.html#If閱讀 – Caw