4
#define LED1_ON() { /* twiddle port bit */ }
#define LED2_ON() { /* twiddle port bit */ }
//  ...
#define LED9_ON() { /* twiddle port bit */ }

#define LED_ON(x) LED##x_ON()

上記のコード(または同様のもの)を使用して、(たとえば)LED_ON(1)マクロを呼び出したり、マクロをLED1_ON()呼び出したりしたいと思います。 LED_ON(2)LED2_ON()

cpp にこれを実行させることは可能だと思いますが、明らかに構文が正しくありません。これを可能にする構文を知っている人はいますか?

を呼び出す行でLED_ON(2)、gcc からエラー メッセージが表示されます。

undefined reference to `LEDx_ON'
4

3 に答える 3

16

LED_ONとして定義する必要があります

#define LED_ON(x)  LED##x##_ON()

引数を取り、接頭辞と接尾辞xを貼り付けたいとします。LED_ON

于 2013-10-22T02:04:24.787 に答える
0

このようなことをしてください

#define LED_ON(num) \
    void LED_ON##num() \
    {\
        printf("set the bit for %d\n", num); \
    }\

LED_ON(1) 
LED_ON(2)

int main() {
    LED_ON1();
    LED_ON2();
}

LED_ON(1) および LED_ON(2) は、LED_ON1() および LED_ON2() という名前でフル機能に拡張され、LED_ON1() LED_ON2() として関数を呼び出します。

于 2013-10-22T00:50:10.620 に答える