いまだに高い人気を誇るプログラミング言語「C」。プリプロセッサを利用した柔軟性の高い記述が可能な点も魅力の一つとなっています。
今回紹介するヘッダーファイル「preprocessor_fun.h」は、この柔軟性の高さを逆用して、プログラムをまともに動かないように改造する、危険なヘッダーファイルです。
例えば「if => while」のような簡単なキーワードの置換から、
// Easy keyword replacement. Too easy to detect I think! #define struct union #define if while #define else #define break #define if(x) #define double float #define volatile // this one is cool
「floor => ceil」のような数学系のもの、
// I heard you like math #define M_PI 3.2f #undef FLT_MIN #define FLT_MIN (-FLT_MAX) #define floor ceil #define isnan(x) false
だいたい動くけどたまに動かない、rand()等を利用したデバッグの難しそうなものまで準備されています。
// Randomness based; "works" most of the time. #define true ((__LINE__&15)!=15) #define true ((rand()&15)!=15) #define if(x) if ((x) && (rand() < RAND_MAX * 0.99))
「仕事を辞める前に追加するといいよ」とコメントがありますが、もちろんこれはジョークでしょう。実行すると大問題になる可能性がありますので、頭の体操、あるいは実験だけにとどめておいた方が良いと思われます。Hacker Newsではさらなるバリエーションも検討されています。こちらも参考までにどうぞ。
continue reading