アカウント名:
パスワード:
#define X foo bar baz
しておいて
printf("%s\n", X);
すれば、展開結果は
printf("%s\n", foo bar baz);
になります。当然、コンパイル時には変数fooが未定義だの構文がおかしいだのとエラーが出ます。
printf("%s\n", "foo bar baz");
と展開したいなら、#defineする段階で引用符で囲まないといけません。
#define X "foo bar baz"
ちなみに、gccは-Eオプションで「プリプロセッサで処理した後」を出力できますよ。
コンパイルエラーの話は上で述べているので…
gccなので、ちょいと-Eを試します。ありがとうございました。
# 正確にはGASというか、asではあるのですが…。# まずはCから。
重複しちゃったorz。
実際にgcc -Eするとこういう出力が得られます。
$ cat pptest.c#include <stdio.h> #define X foo bar bazint main(void) { printf("%s\n", X);} $ gcc -E pptest.c# 1 "pptest.c"# 1 "<built-in>"# 1 "<command-line>"# 1 "pptest.c"# 1 "/usr/include/stdio.h" 1 3 4# 28 "/usr/include/stdio.h" 3 4以後延々と#inckude <stdio.h>の展開が続くので省略。 int main(void) { printf("%s\n", foo bar baz);}
-Eで予想以上にいい感じの出力が得られました。ありがとうございました。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー
エラーが出るのが当たり前。 (スコア:1)
#define X foo bar baz
しておいて
printf("%s\n", X);
すれば、展開結果は
printf("%s\n", foo bar baz);
になります。当然、コンパイル時には変数fooが未定義だの構文がおかしいだのとエラーが出ます。
printf("%s\n", "foo bar baz");
と展開したいなら、#defineする段階で引用符で囲まないといけません。
#define X "foo bar baz"
ちなみに、gccは-Eオプションで「プリプロセッサで処理した後」を出力できますよ。
Re:エラーが出るのが当たり前。 (スコア:1)
コンパイルエラーの話は上で述べているので…
gccなので、ちょいと-Eを試します。
ありがとうございました。
# 正確にはGASというか、asではあるのですが…。
# まずはCから。
Re:エラーが出るのが当たり前。 (スコア:1)
重複しちゃったorz。
実際にgcc -Eするとこういう出力が得られます。
Re:エラーが出るのが当たり前。 (スコア:1)
-Eで予想以上にいい感じの出力が得られました。
ありがとうございました。