2016-11-14 78 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,因为它是非常容易的东西发生冲突必须非常小心。

相关问题