[〜#〜] c [〜#〜]のマクロを使用して、このようなことを実行できますか?
#define SUPERMACRO(X,Y) #define X Y
then
SUPERMACRO(A,B) expands to #define A B
プリプロセッサは1つのパスしか実行しないので、私はそうは思わない。
公式gccのみ。サードパーティのツールは使用しないでください。
マクロを前処理ディレクティブに展開することはできません。 C99 6.10.3.4/3から「再スキャンとさらなる交換」:
結果として完全にマクロで置き換えられた前処理トークンシーケンスは、たとえ類似していても、前処理ディレクティブとして処理されません。
マクロを他のマクロで定義することはできませんが、マクロからマクロを呼び出すことができます。これにより、基本的に同じ結果が得られます。
_#define B(x) do {printf("%d", (x)) }while(0)
#define A(x) B(x)
_
したがって、A(y)
はdo {printf("%d", (y)) }while(0)
に展開されます
いいえ。操作の順序は、マクロの展開が行われる前にすべてのプリプロセッサディレクティブが認識されるようなものです。したがって、マクロがプリプロセッサディレクティブのように展開された場合、マクロはそのように認識されず、(誤った)Cソーステキストとして解釈されます。
すみません、できません。マクロで他のマクロを呼び出すことはできますが、新しいマクロを定義することはできません。
前処理オプションのみで実行してから、前処理済みファイルでコンパイルすることもできます。
あなたはこれを行うかもしれません:#define SUPERMACRO(X、Y)define X Y
次に、エディターのマクロ拡張機能を使用して、欠落している#に貼り付けます。
あるいはさらに良い:別のより強力な文字列処理言語をプリプロセッサーとして使用します。