2005/07/29

はぁー、別に空回りしてるってわけじゃないんだけどなんだか踏んだり蹴ったりな感じでちょっぴりへこんでます。っていうかいろいろ予定通り行かなすぎだよー。あらゆる角度から読みを働かせたのに想定の範囲外の出来事が起こりすぎなわけで…。

Visual C++ 2005 Express Beta2

家のマシンに入れようと思ったらVS.NET 2002との共存インストールがBeta2ではサポートされていないので2003が入ってる研究室のマシンにいれました。

えーととりあえず日本語版ではビルド環境にPlatformSDKのinclude, lib, binのパスを通すためのUIが用意されていないのでこれは直接Configファイルを書き換えなければならないようです。Cマガ7月号のCD-ROMに収録されてたので、記事の指示通りConfigファイルとかを書き換えて無事ビルドできるようになりました。

でも、ビルドパスとかの設定はどうも個人プロファイルとして保存されるので、Configファイルを書き換える前に起動しちゃった場合はDocuments and Settingsの自分ディレクトリ内にあるLocal SettingsとApplication DataのほうにあるVCExpressの8.0プロファイルを消してから起動しないとConfigファイルの内容が反映されないので要注意です。

で、肝心の2005なんですが、すごいですよ、デバッグ時のスマートタグが便利すぎです。こういう統合開発環境はデバッガを使ってこそですが(デバッガつかわねーなら普通にエディタ+makeで十分だしー…といいつつ最近Emacs+gdbの使い方を知ったのでGNU系のコンパイラでもなんとかデバッグできるように…)、このブレークしたときの値を参照するために今まではウォッチに突っ込んだりクイックウォッチで調べたりしてましたが、それがコードの変数のところにカーソルを当てるだけでスマートタグでどんどんたどっていけるようになってるんですよ。これは便利すぎ。

しかもその上、なんとstd::vectorの要素数とかも普通にスマートタグが表示してくれてたりして、一体コレはどうなってるんだと気になるところですが、まぁあんまり気にしないことにしておきます。とにかくこれはすごい。

と、実はそのぐらいしか使ってなかったりなので、もうちょっと突っ込んだ機能は追々調べていくことにします。とりあえずアレですよ、最近C++用のリファクタリングブラウザを探してたんですが、なんとVS.NET 2005ではクラスデザイナってやつにリファクタリング機能もついたとか! …あれ、でも、クラスデザイナってCLR用だからネイティブなC++ではもしかしてクラスデザイナは使えなかったりするのかな…、どうなんだろう。

あとコンパイラの変更とかも微妙にあったようです。研究室の他の人が書いた(例の)ライブラリをコンパイルしてみたら、実行時にエラーが出るようになってるので調べてみたら、本当は&&でやらなきゃならない判定をなぜかコンマ演算子で並べてるとかいう謎なコードを発見したんですが、今までこれ普通に動いてたんですよね、不思議すぎます。要は

int i=0, j=0;
while(i!=A, j!=B){
    // なんかの処理
}

みたいにループの終了判定にコンマ演算子をつかってた、と。本当はwhile(i!=A && j!=B)って書くべきですよねぇ(実際のコードではiとjにあたる変数はイテレータで、iもjもend()ではない限り、という意味で書かれていたようでした)。コンマ演算子は単に処理順を定めて処理をするだけなので、式の評価値自体は最後の式(コンマの右側の式)の評価した結果になるので、while(i!=A, j!=B)という評価だとi!=Aは比較するけど別にwhileの終了判定には使われないということになるわけですね。

まぁおおざっぱに「コンマ演算子は最後の式しか評価しない」ってことを知っていたのでこのバグを見破ることができましたが、これ、たぶん普通の人は見落としがちであんまり気付かないんじゃないかなぁ…。

うされもん @acidlemonについて

|'-')/ acidlemonです。鎌倉市在住で、鎌倉で働く普通のITエンジニアです。

30年弱住んだ北海道を離れ、鎌倉でまったりぽわぽわしています。

外部サイト情報

  • twitter
  • github
  • facebook
  • instagram
  • work on kayac