IBM Metal C Prologのパラメータ化されたプリプロセッサマクロを作成したいと思います。Cプリプロセッサで#を含む単一文字列をパラメータ化する方法は?
初期unparametrizedフォームは本当のプロローグは #pragma prolog(Foo, " #MCPROLG MAIN=(YES,16,132)")
より複雑ですが、質問のために重要な部分は、文字列内の値があるということです。
#pragma
ディレクティブ自体は、マクロの一部にすることはできませんので、私はそのような_Pragma
とすることを置き換える:
私はこのようにはFooをパラメータ化することができます:私は作成することができますどのように
#define STR(...) #__VA_ARGS__
#define PROLOG(function) _Pragma(STR(prolog(function , " #MCPROLG MAIN=(YES,16,132)")))
を値16をパラメータ化するマクロ?
私はプリプロセッサ内で文字列を連結する必要があるようですが、私は以下のアプローチを試みました。すべての私たちのこのstringizationマクロ:
#define STR(...) #__VA_ARGS__
1)トークン16に置き換えている(のは、それが交換されるように、文字列自体の中にはできませんそれsize
)を名前を付けてみましょう。
#define PROLOG(function, size) _Pragma(STR(prolog(function , " #MCPROLG MAIN=(YES, size ,132)")))
2)_Pragmaは、単一の文字列を受け取り、私はこのようにCの文字列の連結閲覧できません。私はこのようなプロローグの全体の第2引数stringizeない)
#define PROLOG(function, size) _Pragma(STR(prolog(function , " #MCPROLG MAIN=(YES," #size ",132)")))
3 :
#define PROLOG(function, size) _Pragma(STR(prolog(function , STR( #MCPROLG MAIN=(YES, size ,132)))))
#MCPROLG
はその位stringizationトークンとして扱われないように、文字列の中に滞在する必要があるため。問題1(置換リスト内のパラメータを拡張する必要があります)、あなたは間接的な文字列化マクロが必要に対処するため
感謝。 あなたはまさに括弧について書いてあります。簡潔にするために除外したMAINグループのような追加のパラメータがあり、かっこのバランスをとることができませんでした。私はその問題を修正した。 – voyta