読者です 読者をやめる 読者になる 読者になる

プリプロセッサの記事、ブクマありがとうございます

Cプリプロセッサメタプログラミングで、文字列系泥沼関数型プログラミング - 簡潔で覚えやすいタイトルを3秒で思いつく程度の能力を何気なく公開したところ、大量のブックマークをつけていただきました。みなさんありがとうございます。

ブクマコメには、変態、アホ、マジキチ、クレイジーといった感想が多く挙げられ、内心ニヤニヤが止まりません。このように評価していただき、大変うれしく思っております。

ちなみにあとちょっとで200ブクマ達成なのでもっとブクマちょうだい!

ちなみに、C++のtemplateでfibを書くと次のようになります。

#include <iostream>

template<int i>struct fib{static const int value=fib<i-1>::value+fib<i-2>::value;};
template<>struct fib<0>{static const int value=0;};
template<>struct fib<1>{static const int value=1;};

int main() {
    std::cout << fib<10>::value << std::endl;
    return 0;
}

こんな短く書けるなんて、C++は実にけしからんです。こんなんじゃ記事になりません。プリプロセッサメタプログラミングの前ではこの程度のコードじゃ変態なんて名乗れないですね。

あと、BoostPPはあの記事を書いている途中でふと気になって眺めようと思ったんですが、なんか力業臭がしたので読むのやめました。



さて、真面目な話をします。

あの記事の発想は、自分はC言語をちゃんと理解しているのか、という疑問の延長線上にありました。関数ポインタを返す関数 - 素人がプログラミングを勉強していたブログという記事も同じ疑問から派生したものです。

そんな疑問のなかでも大きな存在であったプリプロセッサの挙動をちゃんと確かめようと思い、調べてみたところ、これを使って遊べるのではないか、という発想に至りました。

そういえば、プリプロセッサでメタプログラミングができるという話を聞いたことがありますし、C++テンプレートメタプログラミングで面白い計算をしたことはありますから、プリプロセッサでも同じようにできるかなと思い、試してみたところ、茨の道でした。

しかし、文字列の結合と置換の繰り返しで計算をする、という発想が大変面白かったので、思いきってこれを記事にしてみたわけです。

この記事で行った内容はただの遊びレベルでしかありません。しかし、それを通じて、僕はプリプロセッサに対して理解を深めることができたわけです。

こんな難しいプリプロセッサの機能を理解したところで、普通使わないとは思います。しかし、これらの機能はCの文化の一部なわけですから、それによって得た理解は他のC言語の理解につながると思うんです。

ですから何が言いたいかと言いますと、ぜひとも皆さんが、僕の試したのと同じように、プリプロセッサで遊んでみるといいと思うんです。こんなに時間を投資しなくても、試してみることは大事だと思うんです。