要测试的C宏:“如果定义了多个”

时间:2010-11-29 06:49:13

标签: 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驱动程序使用其中一个块。 有更优雅的方式吗?

3 个答案:

答案 0 :(得分:11)

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

答案 1 :(得分:0)

是的,请使用define运算符,例如:

#if defined (USB_HID) && defined (USB_INUSE)

答案 2 :(得分:0)

为什么不#elif?

#if defined(USB_HID)
   #define USB_INUSE
#elif defined(USB_SERIAL)
   #define USB_INUSE
#endif