ここにヘッダーファイルがあります。
// a.h
#ifndef _A_H_
#define _A_H_
#ifndef MACRO_FUNC
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
#endif
#endif
MACRO_FUNC
上記のコードは、マクロ関数が定義されているかどうかを判断する方法です。それは正しい方法ですか?
はい、#ifdef
または#ifndef
定義されているマクロをテストする正しい方法です。#undef
後に続くを使用#define
して、既存の定義を置き換えることもできることに注意してください。
#ifdef MACRO_FUNC
#undef MACRO_FUNC
#endif
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
また、サンプル マクロは次のように表現する方が適切です。
#define MACRO_FUNC((X), (Y)) ((X) * (Y) + (X) - (Y))
MACRO_FUNC(somevar - 1, othervar + 1)
理由がはっきりしない場合に電話をかけたらどうなるかを考えてみましょう。
はい、これが正しい方法です。独自の実装が確実に使用されるようにするもう 1 つの方法は、最初に以前の定義を未定義にすることです。
#ifdef MACRO_FUNC
# undef MACRO_FUNC
#endif
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
これはあなたがした正しい方法です
はい、マクロはプリプロセッサによって評価されるため、プリプロセッサ ディレクティブを使用するか、プリプロセッサ ディレクティブが存在するかどうかを確認する必要があり#ifdef
ます#ifndef
。
はい、マクロが既に定義されているかどうかを確認する方法です。
で始まる識別子_[A-Z]
は実装用に予約されていることに注意してください。例によって変更_A_H_
しA_H_
ます。