6

macro.h で特別なマクロを定義していますが、ソース ファイル (h/cpp) の一部でのみ有効にしたいのですが、どうすればよいですか?

マクロに精通していてはならないソースファイルの前に、「悪い」ユーザーがマクロ.hを含めたのではないかと心配しています。

どうすれば防ぐことができますか?

4

3 に答える 3

5

を使用して、ファイル スコープでのみ定義されたマクロを持つことができます#undef。例:

#define MACRO 1

int a = MACRO;

#undef MACRO

int b = MACRO; // ERROR

ただし、インクルードの順序に依存しない限り、これはファイル間では機能しません。これは悪いことです。

macro.hソースで定義されたマクロを使用する場合は、2 番目のマクロをソースunmacro.hの最後に含めることができます。

 // foo.cpp
 // other includes
 #include "macro.h"
 // no other includes!

 // contents of the source

 #include "unmacro.h"

ただし、エラーが発生しやすいため、お勧めしません。マクロを使用する必要がある場合は、再検討してください。最新の C++ では、それらの有効な使用は非常にまれです。

于 2015-09-04T13:40:31.623 に答える
1

できません。macro.hにあり、そのファイルが公開されている場合、それを回避することはできません。

一般的な手法は、マクロを条件付きで定義することです。

#ifdef SOME_CONDITION
#define MY_MACRO
#endif

しかし、「悪い」ユーザーも同様に を定義できますSOME_CONDITION

すべきことは、公開ヘッダーを非公開ヘッダーから分離することです。あなたが問題を述べたように、隠したいマクロはおそらくパブリックヘッダーにあるべきではありません。

于 2012-12-09T15:21:40.203 に答える
0

特にどこにでも含まれる .h にマクロがある場合、マクロの効果範囲を制御することはできません。

少数の .h および .cpp ファイルにのみ存在させたい場合、1 つのオプションは、それらの cpp ファイルの先頭でそれを (再) 定義することです。また、これらのマクロだけを独自に分離し.h、必要な cpp ファイルにのみ含めて、コードのユーザーに公開しないようにすることもできます。

より具体的な回答が必要な場合は、より具体的な例を挙げてください。

于 2012-12-09T15:21:48.597 に答える