サンプルプロジェクトでは、マクロを定義しました
#define FOO(x, y) x + y .
これは完全にうまく機能します。たとえば、FOO(42, 1337)
はに評価され1379
ます。
しかし、私は今、別のものを使用したいと思います#define
:
#define SAMPLE 42, 1337
今電話するとFOO(SAMPLE)
、これは機能しません。コンパイラーは、2つの引数を取ると言っていFOO
ますが、1つの引数でのみ呼び出されます。
これは、マクロの引数は関数自体に先立って評価されますが、プリプロセッサがこの評価後に命令全体を再度解析しないためだと思います。これは、マクロから追加のプリプロセッサディレクティブを出力できないという事実に似ています。
目的の機能を取得する可能性はありますか?
FOO
マクロをC関数に置き換えることはできません。元のマクロは、変更できないサードパーティのコードにあり、配列初期化子で直接使用される値のコンマ区切りのリストを出力します。したがって、C関数は同じ動作を複製できません。
簡単な方法でこのタスクを実行できない場合:(x, y)
ペアを保守可能な形式でどのように保存しますか?私の場合、8つの引数があります。したがって、個々のパーツを別々の#define
-sに格納することも、保守が容易ではありません。