2010-11-29 8 views
3

自分のコードにリソースを使用するドライバがいくつかありますが、そのうちの1つしか定義できません。 たとえば、次の定義がある場合:USB_HID、USB_SERIAL、USB_STORAGE。 と私は1つだけが定義されていることをテストしたい、これを行う簡単な方法はありますか? 現在、私はそれをこのようにやっている:各USB_XXXドライバのためのこれらのブロックの1と テストする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 

を...。 これを行うよりエレガントな方法はありますか?

#elifのではないのはなぜ

#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。 @Mike Weller:私もそうです:) –

+0

伝説の答えは、私がこれを見た前に私はオペレーターがすごかったです。 – sweetlilmre

0

はい、などdefine演算子を使うのか?

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

関連する問題