vyamaの日記: const 性 の無視
今関っているプロジェクトは部分的に古いコードも取り込まないとやっていけないスケジュールだっていうのは分かっているので、主要な所は全部書き直しだけど、最底辺にあるモジュールはかなり積極的に再利用する方針で進めている。と・こ・ろ・が・だ。
その古いコードを C++ の型検査チェックに書けたら、出るわ出るわ警告の嵐。半分くらいが unsigned を使わなくちゃいけないところで、(暗黙の) signed を使っている所。まあ、strncpy とかの引数に使われるくらいだから、MS-Windows MBCS 環境では、まあ「昔は無茶をやってたよね」ですまされる。(本当は「今その無茶を継承する」のを止めさせるべきなんだが、修正箇所が多すぎて検査が間に合いそうもない)最悪なのが、const 性。むか~しに開発された C のコードは const なんてのはなかったから、まあ仕方がないけど、製品として今でも出荷しているコードが const 性 検証もなしにずっと使われているってのは一体どういうことなんだ?
以下のコードを見た時には泣けてきた。
CString strSomePath;
//strSomeStringに対する代入
//strSomePathファイルをロードする
LoadSomeFile( (char * far )(LPCTSTR)strSomePath);
far は冗談だと思って見過ごすにしても、LoadSomeFile() が要求するパス名は意味的に const 引数が妥当でしょう?それともLoadSomeFile() で指定された以外のパスを勝手に読んじゃうことがあるの? (strSomePath == "" の可能性があればあり得るけど、今回はそうじゃなかった) ず~と昔から使われているコードをメンテナンスもしないで、ほったらかしにしておくから、(char * far )(LPCTSTR) なんてとんでもなく見難い cast をしなくちゃならなくなったのが分からないのか?このキャストがとんでもなく醜いものだっていう感覚が何故ない?なぜ、const 性エラーチェックみたいな穏やかで、害の少ない、それでいて見かけよりは強力な機能を殺すようなことをするんだ?泣けるぜ。
const 性 の無視 More ログイン