Макрос C для проверки: «Если определено более одного» - PullRequest
3 голосов
/ 29 ноября 2010

У меня есть несколько драйверов, использующих ресурс в моем коде, из которых может быть определен только один.например, если у меня есть следующие определения: 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 ]

11 голосов
/ 29 ноября 2010
#if defined(USB_HID) + defined(USB_SERIAL) + defined(USB_STORAGE) != 1
#error Define exactly one of USB_HID, USB_SERIAL, USB_STORAGE
#endif
0 голосов
/ 01 декабря 2010

Почему не #elif?

#if defined(USB_HID)
   #define USB_INUSE
#elif defined(USB_SERIAL)
   #define USB_INUSE
#endif
0 голосов
/ 29 ноября 2010

Да, используйте оператор define, например:

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

...