2010-11-29 28 views
3

我有幾個驅動程序使用我的代碼中的資源,其中只能定義一個。 例如,如果我有以下定義:USB_HID,USB_SERIAL,USB_STORAGE。 我想測試只有一個被定義,是否有一個簡單的方法來做到這一點? 目前我做這種方式:要測試的C宏:「如果多於一個定義」

#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司機之一。 有沒有更優雅的方式來做到這一點?

回答

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

不錯的解決方案。我可能會以一個令人討厭的混搭&& ||來結束運營商。 – 2010-11-29 13:42:36

0

是,使用define運營商如:

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

0

爲什麼不#elif指令?

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