Tchar.h generic-text mapping cheatsheet
を作るときに問題となったのが、
「C言語の #define
展開を沢山一気に確認するにはどうすればよいか?」
ということである。
もっとも一個一個ならばIDE上でマウスホーバーすれば展開表示されるので
このようなことを思う必要はない。
そこでコンパイラによって実際に展開させることにした。
コンパイラのプリプロセッサ展開だけをさせることも考えたが、
出力の整形も一気にやらせることを考えたので
普通にC言語のプログラムを書くことにした。
このとき一つ注意が必要だったので、備忘録としてメモっておく。
これはコンパイラによって下記のように展開される(C言語として妥当ではないのでプリプロセッサ処理まででコンパイルエラーになる)
今したいのはこの展開後を「テキスト」として取得したいので
ここでマクロの #
を使うことにした。
しかし実はこれは予期する動作にならず、
下記のようになる:
展開させつつ、テキストに変換するにはマクロを二重にする必要があるらしい。
これで望んだ展開がやっと得られる。
逆に言えば、 #
を含むマクロを間接的に呼んだ場合、
実際に書かれたものと違って展開されてしまうので
注意が必要ということになる。
↓