C++ で FibBuzz

震源地: Codnote.net
やりましょう.
fibbuzz.cpp

#if !defined(BOOST_PP_IS_ITERATING)
    #include <boost/preprocessor/iteration/iterate.hpp>
    #include <boost/preprocessor/slot/slot.hpp>
    #define BOOST_PP_VALUE 1
    #include BOOST_PP_ASSIGN_SLOT(1)
    #define BOOST_PP_VALUE 1
    #include BOOST_PP_ASSIGN_SLOT(2)
    #define BOOST_PP_ITERATION_PARAMS_1 (3, (0, 29, "fibbuzz.cpp"))
    #include BOOST_PP_ITERATE()
#else
    #if BOOST_PP_SLOT(1) % 15 == 0
FizzBuzz
    #elif BOOST_PP_SLOT(1) % 3 == 0
Fizz
    #elif BOOST_PP_SLOT(1) % 5 == 0
Buzz
    #else
BOOST_PP_SLOT(1)
    #endif
    #define BOOST_PP_VALUE BOOST_PP_SLOT(1)
    #include BOOST_PP_ASSIGN_SLOT(3)
    #define BOOST_PP_VALUE BOOST_PP_SLOT(2)
    #include BOOST_PP_ASSIGN_SLOT(1)
    #define BOOST_PP_VALUE BOOST_PP_SLOT(3) + BOOST_PP_SLOT(2)
    #include BOOST_PP_ASSIGN_SLOT(2)
#endif

実行

$ g++ -E -P -I $BOOST_ROOT -I . fibbuzz.cpp
1
1
2
Fizz
Buzz
8
13






Fizz



34
Buzz
89
Fizz
233
377
Buzz
Fizz
1597
2584
4181
FizzBuzz
10946
17711
28657
Fizz
Buzz
121393
196418
Fizz
514229
Buzz

VC や Clang でも動くと思いますが,空白行だらけになってしまうので GCC で実行するのがいいと思います.