Monday 14 May 2012

Windows なプログラム

今日は、Kinect のソフト読みたいとかいう人がいるので、久しぶりに Windows なプログラムを読んでみた。C++ ですが、VC++ 依存ではないらしい。

まず、

* ハンガリアン記法

ポインタには p を付ける。文字列には str を付けるって奴ね。改めて見てみると、あほくさい。特に宣言部分の重複が。この辺りに、まず屈しないと、Windows なプログラムは書けないからな。

次に、Validation のマクロ。

* 入力チェックして、違反してたらエラーを return するマクロをたくさん並べる

もちろん、C++ の例外は使わない。TL でも「C++ の例外を使うプログラマは取らない」と公言している人とかいた… たしかに、C++ の例外の実装はひどいのだが。これらを何故マクロにするのかは良くわからない。そういう習慣なのでしょう。

戻り値を例外識別に使うと、本当の(?)戻り値は必ず参照かポインタ(同じことだが)を使うことになる。微妙な感じはするね。

ただ、「例外」って言葉はおかしいよね。それはプログラムにとっては普通なことだから別に例外的なものではない。プログラマが期待した入力でないのか、プログラム中の矛盾なのかという問題はある。その時に、どうするべきかという指針があるわけではないけど。ただ、

* assert で、ブルースクリーン

が良いかと言われると、ちょっと抵抗ある。OS研究会でも「さらにおかしなことが起きないように、早めに panic する」みたいなことが言われていた。つまり、早めに落とすってのは今でも積極的に容認されているらしい。それは、

* dependable

とは言わないだろうとは思うが、そこを乗り切るのは簡単ではない。某プロジェクトでも苦労しているようですが、一気に段階が進むわけではありません。一段一段登っていくしかないね。しかし、Windows なプログラムの先に dependable があるとは思えないな。

最後に、indent 。if で改行して、if と同じ行に単一の { を置く方式ですか。あぁ、そうですか。僕も最初に K&R を読まなかった時には、そう書いてましたよ。はいはい。僕は、K&R が好きだが、多数派というわけではないらしい。

単なるAPI変換なので、プログラミング的には面白いところはありません。でも、むしろ懐かしい感じがした。Windows は .NET に移行したいのだろうから、ほとんどのプログラマは VC++ をいじることはなくなるのだと思いますが、ゲームは別か。

No comments: