私はトリッキーな問題に直面しています。コンパイラのコマンドラインに従ってCソースファイルのコンテンツを偽造したいのですが。例(VCを使用):
コマンドラインを使用する場合
cl -c -E -Dfoo=rice test.c
実際の Cコンテンツを取得したい(前処理後):
char *s = "rice";
コマンドラインを使用する場合
cl -c -E -Dfoo=ball test.c
実際のCソースファイルの内容を取得したい:
char *s = "ball";
今解決策を見つけています...
初挑戦:
// test.c
#define STRNAME(n) #n
char *s = STRNAME(foo);
-運がない。コマンドラインでどのfooが定義されていても、私は常に
char *s = "foo"; // Oh no!
2番目の試み(私がイメージできる最も近いが、それでも冗長):
// test.c
#define STRNAME(n) #n
char *s = foo;
今回は、コマンドラインを詳細に変更する必要があります。
cl -c -E -Dfoo=STRNAME(rice) test.c
今私は得る
char *s = "rice";
この冗長性から私を助ける方法はありますか?
ちなみに、私はコマンド引数に引用符を導入するのは本当に好きではありません(argv[x]
WindowsCMDとLinuxBashでそのようなコマンドラインを確実かつ移植可能に書くことができないため、引用符をの一部にするのは好きではありません-私は思います。