我们说我有一个#define RTR r2
声明。是否可以检查RTR
宏的值?我看起来像这样:
#if RTR == r1 || RTR == r2
It is router1 or router2!
#endif
我想这是不可能的..
答案 0 :(得分:1)
让我们看看GCC documentation:
[在' #if'] 表达式是整数类型的C表达式,受到严格的限制。它可能包含
- [...]
- 宏。在表达式值的实际计算开始之前,表达式中的所有宏都会被扩展。 定义运算符的使用,它允许您检查是否在'#if'中间定义了宏。
- 不是宏的标识符,它们都被认为是数字零。这允许您编写#if MACRO而不是#ifdef MACRO,如果您知道MACRO在定义时将始终具有非零值。没有函数调用括号的函数式宏也被视为零。
所以,根据最后一点,除非r1
ans r2
是你的例子中的宏(或整数常量),条件
#if RTR == r1 || RTR == r2
相当于
#if RTR == 0 || RTR == 0
我猜这不是所希望的行为。为此,您应该为RTR
分配一个整数常量值(或表达式,在编译时计算整数常量)。
RTR
时,你应该非常小心,因为它很容易与某些东西发生冲突。