macros - 用于测试的 C 宏 : "If more than one defined"

标签 macros c-preprocessor

我的代码中有多个驱动程序使用某个资源,但只能定义其中一个。 例如,如果我有以下定义:USB_HID、USB_SERIAL、USB_STORAGE。 我想测试是否只定义了一个,有没有一种简单的方法可以做到这一点? 目前我正在这样做:

#ifdef USB_HID
  #ifdef USB_INUSE
    #error "Can only have one USB device"
  #else
    #define USB_INUSE
  #endif
#endif

#ifdef USB_SERIAL
  #ifdef USB_INUSE
    #error "Can only have one USB device"
  #else
    #define USB_INUSE
  #endif
#endif

... 每个 USB_XXX 驱动程序使用这些 block 之一。 有更优雅的方法吗?

最佳答案

#if defined(USB_HID) + defined(USB_SERIAL) + defined(USB_STORAGE) != 1
#error Define exactly one of USB_HID, USB_SERIAL, USB_STORAGE
#endif

关于macros - 用于测试的 C 宏 : "If more than one defined",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4301471/

相关文章:

.net - 与 |Pipe-delimited| 有什么关系?连接字符串中的变量?

基于宏函数参数的 C++ 宏函数扩展

macros - 是否可以编写一个计算项目并生成枚举的宏?

ios - 启用静态库中使用的 ifdef 宏

c - 如何在 include 预处理器指令中包含 makefile 变量

c - 有没有办法让 gcc 像对待 #include ""一样对待 #include <>?

c++ - 保存 C++ 预处理器宏的原始值

c - 在编译时执行 C 宏函数

c - 为什么我的宏不能编译?

macros - Elixir:在定义它的同一模块的主体中​​使用宏