1

引数を使用しないが、使用される定義済みの整数と文字列を持つマクロを作成したいと考えています。

引数を持つマクロに似たものについて以前に尋ねましたが、これがその方法です:

#define BUZZER_PIN 1
#define BUZZER_PORT B
#define BUZZER_ALT 1

#define INIT_BUZZER_(PORTX, PIN, ALT)                                   \
    do {                                                                \
        PORT##PORTX##_PCR(PIN) = PORT_PCR_MUX(ALT) | PORT_PCR_DSE_MASK; \
        GPIO##PORTX##_PDDR |= (PIN)<<1;                                 \
       } while (0)

#define INIT_BUZZER(PORTX, PIN, ALT)                                    \
    INIT_BUZZER_(PORTX, PIN, ALT)

INIT_BUZZERしかし、それを参照して上記のすべてを実行したいだけの場合はどうなりINIT_BUZZER_ますか?

私がしようとしました:

#define INIT_BUZZER INIT_BUZZER_(BUZZER_PORT, BUZZER_PIN, BUZZER_ALT)

私はいつも文字列だけに問題があり、その部分がよくわかりません。このように呼び出すと、値としてではなくBUZZER_PORT文字列として処理されますBUZZER_PORT=B

4

1 に答える 1

2

に渡す前に、マクロ引数を展開する別のマクロが必要ですINIT_BUZZER_

#define INIT_BUZZER_X(PORTX, PIN, ALT)                                    \
    INIT_BUZZER_(PORTX, PIN, ALT)

#define INIT_BUZZER INIT_BUZZER_X(BUZZER_PORT, BUZZER_PIN, BUZZER_ALT)

INIT_BUZZERこれで、コードでを使用すると、最初INIT_BUZZER_Xに 3 つの引数で展開されます。次に、プリプロセッサは プロセスINIT_BUZZER_Xに進み、3 つの引数のそれぞれを展開して に渡しますINIT_BUZZER_

于 2013-07-11T22:20:17.037 に答える