マクロを一時的に上書きしてから復元する必要があります。 Like:Cプリプロセッサでマクロを一時的に上書きする
#define FOO X
#save FOO
#define FOO Y
...
#restore FOO
標準のCプリプロセッサでは可能ですか? GCCで?
ADDED。実世界の例についてエラー例外のためにグローバルマクロを使用します。 assert
のように動作しますが、デバッグバージョンだけでなく永続的な使用のためにも機能します。したがって、たとえば、私は通常、マクロ内で関数を(副作用を伴って)呼び出します。これは一度定義されますが、定義は永続的ではありません。したがって、私は先験的にそれを知らない。いくつかのコードでは、マクロの修正版が必要ですが、はコードの一般的なスタイルを保存します。コードの1つの部分が1つのマクロを使用し、他の部分が他のマクロを使用すると見苦しいです - どちらのマクロも同じ目的のを持っていますが、わずかに異なる実装です。
私は元のマクロを一時的に保存し、その元のマクロを復元した後にコードの一部に異なるバージョンを使用することをお勧めします。
あなたが正確に何 'FOOを知っている場合を除き:
これは
generalmacrodefs.h
はあなたが一時的に上書きされる可能性があり、少なくとも定義については、このようなパターンを使用している必要があります。状況に応じて、これは回避策かもしれません'前後です。いいえ、これは不可能です。 –マクロの名前を変更するだけではどうですか?はるかに簡単です。 –
プレーンCについてはわかりませんが、C++ではpush_macroを使用できます:http://stackoverflow.com/questions/1543736/how-do-i-temporarily-disable-a-macro-expansion-in-cc –