Tag Archives: literal

C++でリテラルの文字列をLのリテラルにしてつなげる

前提

Cのリテラル文字列は2つ続けて書くと連結してくれる。

マクロ

ここでL”abcxyz”がほしいときは以下のようにする。

2重のマクロにしないとならない。1重にすると以下のように解釈される

これは以下のように展開される。

つまりマクロを一回かますと、マクロが展開されることになる。##は連結するがシンボルとかを意識しないので単に結びつける、マクロを一回かまさないと展開されないのでLABCになってしまう。このLABCがどこかで#defineされていればちゃんと展開される。

#

ちなみにマクロの#は文字列にして展開してくれるので以下のように書くこともできる。もっと良い書き方があるのかよくわからない。

ソース

https://github.com/ambiesoft/blogprogs/tree/master/5910/literalmacro

コンパイルに/Pオプションを付けるとマクロの展開した時点のソースを拡張子.iをつけて出力してくれる。