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