1

ここにヘッダーファイルがあります。

// a.h

#ifndef _A_H_
#define _A_H_

#ifndef MACRO_FUNC
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
#endif

#endif

MACRO_FUNC上記のコードは、マクロ関数が定義されているかどうかを判断する方法です。それは正しい方法ですか?

4

5 に答える 5

2

はい、#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)理由がはっきりしない場合に電話をかけたらどうなるかを考えてみましょう。

于 2013-01-27T13:26:22.417 に答える
2

はい、これが正しい方法です。独自の実装が確実に使用されるようにするもう 1 つの方法は、最初に以前の定義を未定義にすることです。

#ifdef MACRO_FUNC
#  undef MACRO_FUNC
#endif
#define MACRO_FUNC(X, Y) (X * Y + X - Y)
于 2013-01-27T13:26:33.407 に答える
1

これはあなたがした正しい方法です

于 2013-01-27T13:25:28.030 に答える
1

はい、マクロはプリプロセッサによって評価されるため、プリプロセッサ ディレクティブを使用するか、プリプロセッサ ディレクティブが存在するかどうかを確認する必要があり#ifdefます#ifndef

于 2013-01-27T13:25:50.733 に答える
1

はい、マクロが既に定義されているかどうかを確認する方法です。

で始まる識別子_[A-Z]は実装用に予約されていることに注意してください。例によって変更_A_H_A_H_ます。

于 2013-01-27T13:26:32.893 に答える