• ベストアンサー

マクロの展開

#define A(str) str\n #define B(str) #str #define C(str) printf(B(A(str)); int main() { C(hello) } をプリプロセスすると入れ子になったマクロAが展開されずに  printf("A(hello)"); となってしまいます。  printf("hello\n"); と展開されるようにするにはどうしたらいいでしょうか?  よろしくお願いします。  

質問者が選んだベストアンサー

  • ベストアンサー
  • colder
  • ベストアンサー率43% (30/69)
回答No.1

「#」及び「##」の引数がマクロの場合、内側のマクロを展開させるには、マクロを二重にする必要があります。 #define BB(str) #str #define B(str) BB(str) なお、コンパイラによっては、バグのため、これでもうまくいかない場合もあります。

bobviv
質問者

お礼

有難うございます。手元のgccではこの方法でうまくいきました^^。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

#define A(str) str "\n" #define B(str) A(#str) と言った具合かも …

すると、全ての回答が全文表示されます。

関連するQ&A