2016-11-14 84 views

回答

1

讓我們來看看GCC documentation

[在 '#如果'] 表達是整數類型的C表達式,受到嚴格的限制。它可能包含

  • [...]
  • 宏。在表達式值的實際計算開始之前,表達式中的所有宏都被展開。 使用已定義的運營商,它可以讓你檢查是否宏在「#如果」中間定義。
  • 標識符不在宏,這些都被認爲是數爲零。這使您可以編寫#if MACRO而不是#ifdef MACRO,如果您知道MACRO定義時總是具有非零值。沒有函數調用括號的函數式宏也被視爲零。

因此,根據最後一點,除非r1 ANS r2是宏(或整型常量)自己在你的榜樣,條件

#if RTR == r1 || RTR == r2 

等同於

#if RTR == 0 || RTR == 0 

我猜這不是理想的行爲。爲了這個工作,你應該分配一個整數常量值(或者一個表達式,在編譯時計算爲整數常量)。

BTW,你應該給當預處理宏這樣短的名字RTR,因爲它是非常容易的東西發生衝突必須非常小心。