macro.h で特別なマクロを定義していますが、ソース ファイル (h/cpp) の一部でのみ有効にしたいのですが、どうすればよいですか?
マクロに精通していてはならないソースファイルの前に、「悪い」ユーザーがマクロ.hを含めたのではないかと心配しています。
どうすれば防ぐことができますか?
macro.h で特別なマクロを定義していますが、ソース ファイル (h/cpp) の一部でのみ有効にしたいのですが、どうすればよいですか?
マクロに精通していてはならないソースファイルの前に、「悪い」ユーザーがマクロ.hを含めたのではないかと心配しています。
どうすれば防ぐことができますか?
を使用して、ファイル スコープでのみ定義されたマクロを持つことができます#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++ では、それらの有効な使用は非常にまれです。
できません。macro.h
にあり、そのファイルが公開されている場合、それを回避することはできません。
一般的な手法は、マクロを条件付きで定義することです。
#ifdef SOME_CONDITION
#define MY_MACRO
#endif
しかし、「悪い」ユーザーも同様に を定義できますSOME_CONDITION
。
すべきことは、公開ヘッダーを非公開ヘッダーから分離することです。あなたが問題を述べたように、隠したいマクロはおそらくパブリックヘッダーにあるべきではありません。
特にどこにでも含まれる .h にマクロがある場合、マクロの効果範囲を制御することはできません。
少数の .h および .cpp ファイルにのみ存在させたい場合、1 つのオプションは、それらの cpp ファイルの先頭でそれを (再) 定義することです。また、これらのマクロだけを独自に分離し.h
、必要な cpp ファイルにのみ含めて、コードのユーザーに公開しないようにすることもできます。
より具体的な回答が必要な場合は、より具体的な例を挙げてください。