cpp

Cプリプロセッサ: マクロの再帰禁止とトークンの展開禁止

cpp

Cプリプロセッサがマクロの再帰的な展開を許さないのは良く知られていると思う。 #define A() [B()] #define B() {A()} A() /* [{A()}] に展開される */ つまり、あるマクロの展開中に、それと同名のトークンが出現した場合、展開を行わない。特定のマクロに…

sequenceを線形時間でfoldする

cpp

プリプロセッサメタプログラミングの話。Cプリプロセッサ上で値の列を表現するためのデータ構造の一つとしてsequenceというのがある(Boost.Preprocessorの用語)。 他の言語でいうリストや配列に似たもので、以下のような形をとる。 (0)(1)(2)(3) /* 0から3ま…