2010-11-29 5 views
3

내 코드에서 리소스를 사용하는 드라이버가 여러 개 있습니다. 그 중 하나만 정의 할 수 있습니다. 예를 들어 다음 정의가있는 경우 : USB_HID, USB_SERIAL, USB_STORAGE. 그리고 단 하나만 정의되었는지 테스트하고 싶습니다.이 작업을 수행하는 간단한 방법이 있습니까? 현재 나는 이런 식으로 일을 오전 : 각 USB_XXX 드라이버에 대한 이러한 블록 중 하나 테스트 할 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 

을 .... 더 세련된 방법이 있습니까?

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

답변

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

좋은 해결책. 나는 아마도 && ||의 불쾌한 매쉬로 끝났을 것입니다. 연산자. –

+0

정말 좋습니다. +1. @ 마이크 Weller : 저도 요. –

+0

전설적인 대답, 나는 이것을 보았 기 전에 통신 수에서 쏟아졌다. – sweetlilmre

0

예, 등의 define 연산자를 사용?

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

왜 #elif하지 :

관련 문제