C++ 言語には、プリプロセッサ マクロの保存と復元を処理する自動化された方法がありません。プリプロセッサ マクロ (コンパイラまたはコンパイラのコマンド ラインから定義されていない) は、ファイル グローバル レベルで動作し、マクロのスコープを特定のヘッダーに制限するという概念はありません#include
。
このような問題に対処する方法は、その特定のライブラリから必要な機能へのインターフェイス ラッパーを提供する新しいヘッダー ファイルを作成することですが、マクロの依存関係はありません。次に、その厄介なヘッダー ファイルのみを含むソース ファイルにラッパーを実装します。
コンパイラは、タスクを少し冗長にするための拡張機能を提供する場合がありますが、私が理解しているように完全に自動化されているわけではありません。
GCC および Microsoft コンパイラは、プッシュおよびポップ マクロ プラグマをサポートしています。
Microsoft Windows コンパイラとの互換性のために、GCC は#pragma push_macro("macro_name")
および#pragma pop_macro("macro_name")
.
#pragma push_macro("macro_name")
このプラグマは、as という名前のマクロの値を、macro_name
このマクロのスタックの一番上に保存します。
#pragma pop_macro("macro_name")
このプラグマは、as という名前のマクロの値を、macro_name
このマクロのスタックの一番上の値に設定します。のスタックmacro_name
が空の場合、マクロの値は変更されません。
GCC ドキュメント