人間だれしも、機嫌が良い日がある。
機嫌が悪い日もある。
プリプロセッサを使ってこうやって書きたい日もある。
// **********************************
// 型定義マクロ
#define MY_TYPEDEF( type, alias ) ¥
#ifndef alias ¥
typedef type alias; ¥
#endif // ifndef alias ¥
typedef type MY##alias; ¥
// ==================================
// どのプラットフォームでも大体あるけど
// もし未定義だったらここで改めてエイリアス付けるよ
// ついでにオリジナルのエイリアスも付けるよ
MY_TYPEDEF( unsigned char, u8 )
MY_TYPEDEF( unsigned short, u16 )
MY_TYPEDEF( int, BOOL )
:
ただしこれは叶わぬ夢。人の夢と書いて儚い。
C++プリプロセッサがdefineの多重展開を認めていないからこのコードはエラーになる。
コンパイラに渡された段階で展開された最初の #ifndef の # を #演算子として解釈することになる場合が多い。
そうなることも分かるが、コンパイラもっと頑張れと思う。
今、この記事を読んでC++におけるプリプロセッサマクロがいかに悪で、本来それらを使うべきではないのだという主張を僕に伝えようとメーラーを立ち上げた皆さん。
また、上記のエラーがいかに正当で、僕の主張がいかに無知なものか思い知らせてやろうとしている皆さん。
先に伝えておきたいことが2つある。とても重要なことだ。
まず1つ目は、あなたのその主張はあながち間違いでないことを僕は既に知っており、あなたがメールにコピペしてくれようとしている「EffectiveC++」や「C++設計と進化」の抜粋や、スラッシュドットの熱心なC++コミュニティのスレッドへのURLも、僕は既に何度も読んでいる。
続いて2つ目、僕は連絡先を公開していないので、いくらやっきになってメールの送り先アドレスをこのブログから探しても、答えは見つからないよ。