1. ホーム
  2. c

[解決済み] マクロが定義されていない場合にのみ、マクロを定義するのはなぜですか?

2023-02-11 17:26:09

質問

私たちのC言語コードベース全体において、すべてのマクロが次のように定義されているのを見かけます。

#ifndef BEEPTRIM_PITCH_RATE_DEGPS
#define BEEPTRIM_PITCH_RATE_DEGPS                   0.2f
#endif

#ifndef BEEPTRIM_ROLL_RATE_DEGPS
#define BEEPTRIM_ROLL_RATE_DEGPS                    0.2f
#endif

#ifndef FORCETRIMRELEASE_HOLD_TIME_MS
#define FORCETRIMRELEASE_HOLD_TIME_MS               1000.0f
#endif

#ifndef TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS
#define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS       50.0f
#endif

マクロを定義するだけでなく、これらの定義チェックを行う根拠は何でしょうか?

#define BEEPTRIM_PITCH_RATE_DEGPS                   0.2f
#define BEEPTRIM_ROLL_RATE_DEGPS                    0.2f
#define FORCETRIMRELEASE_HOLD_TIME_MS               1000.0f
#define TRIMSYSTEM_SHEARPIN_BREAKINGFORCE_LBS       50.0f

この練習方法について、ウェブ上のどこにも説明がありません。

どのように解決するのですか?

これにより、コンパイル時にマクロをオーバーライドすることができます。

gcc -DMACRONAME=value

ヘッダーファイルの定義がデフォルトとして使用されます。