2

関数 C があるとします。

uint8_t readPin(uint8_t);

uint8_t readPin(uint8_t pin_num)
{
    switch pin_num
    {
        case 0:
            return(PORTAbits.RA3);
            break;
        case 1:
        ...and so on
    }
}

より人間が読める名前 (再マップ可能) を使用してピンを呼び出したいと思います。たとえば、次のように書けるようになりたいです。

openDoor();

電話する

readPin(2);

使ってみた

#define openDoor() readPin(2)

しかし、それは括弧のために機能しません。これを行う最善の方法について誰か提案がありますか? インクルードするヘッダー ファイルに応じて複数の異なるエイリアスが必要なため、 readPin 関数の名前を変更することはできません。

4

2 に答える 2

3
#define openDoor() readPin(2)

あなたが持っているものは大丈夫です。マクロは空の引数リストであっても引数リストを持つことができるので、これはあなたが望むことをします。

ただし、このようなプリプロセッサの使用には注意が必要です。特に言語がまったく同じことを実行できる場合は、プリプロセッサの使用を避けるのが最善です。デバッガーはプリプロセッサ マクロを認識できません。

void openDoor()
{
    readPin(2);
}
于 2012-11-08T20:04:17.027 に答える
1

#define openDoor() readPin(2)

それはうまくいくはずです。#defineは、前処理であるコンパイルの前に、定義された適切な値で置換トークンが見つかった場所を置換するためにのみ使用されるためです。

なので、書くopenDoor()readPin(2)コンパイル前に置き換わります

于 2012-11-08T20:03:18.523 に答える