fizzbuzz preprocessor

C++テンプレートメタプログラミングの例があるなら、C言語プリプロセッサメタプログラミングの例があってもいいと思うの……

#include <boost/preprocessor.hpp>
#define FIZZBUZZ_PROC(z, i, _) \
  puts( \
    BOOST_PP_IF(BOOST_PP_MOD(i, 3), "", "Fizz") \
    BOOST_PP_IF(BOOST_PP_MOD(i, 5), "", "Buzz") \
    BOOST_PP_IF(BOOST_PP_AND(BOOST_PP_MOD(i, 3), BOOST_PP_MOD(i, 5)), BOOST_PP_STRINGIZE(i), "") \
  )
main() {
  BOOST_PP_ENUM_SHIFTED(101, FIZZBUZZ_PROC, BOOST_PP_NIL);
}

cygwin gccが元気に260MiBものメモリを消費する衝撃のコンパイルコストだけど、出来るものはputsを並べて表示する至って普通のコード。これは衝撃っていうより笑劇だぜ・・・。