在keil ARM编译器中比较enum/define

问题描述 投票:0回答:1

我在使以下条件编译工作时遇到困难:

enum {  MIDI_USB_DEV_MCU_IDX, MIDI_WC_BLE_IDX, MIDI_CONN_1_IDX, MIDI_CONN_2_IDX,MIDI_IN_OUT_UARTS_NB 
};

#define MIDI_UART_IDX_TO_USE_SYSEXS      MIDI_WC_BLE_IDX

我用下面的代码来提醒我上面的定义不应该在Release模式下使用,但是编译器不会在下面的测试中发出警告。

#if MIDI_UART_IDX_TO_USE_SYSEXS != MIDI_USB_DEV_MCU_IDX
#warning MIDI_UART_IDX_TO_USE_SYSEXS must be MIDI_USB_DEV_MCU_IDX in RELEASE MODE
#endif

从我读到的内容来看,枚举被视为 Int,在我的源代码中使用枚举工作正常,但条件编译器测试失败。 任何帮助或提示将不胜感激 谢谢。

enums arm c-preprocessor keil
1个回答
0
投票

预编译阶段不存在枚举常量。你的条件表达式相当于

#if 0 != 0

使常量在

#if
表达式中发挥作用的唯一方法是定义宏常量。

#define MIDI_USB_DEV_MCU_IDX (0)
#define MIDI_WC_BLE_IDX      (1)
#define MIDI_CONN_1_IDX      (2)
#define MIDI_CONN_2_IDX      (3)
#define MIDI_IN_OUT_UARTS_NB (4)
© www.soinside.com 2019 - 2024. All rights reserved.