※ C/C++言語の知識が必要になります。
一昨日の土曜日、ソフトウェアに紛れ込んだバグを調べていました。
いろいろ調べても原因が良くわかりません。
'true'で初期化しているフィールドが、どこかで'false'になっているようなバグです。
これは、スタック壊してる?メモリを爆撃してる?? とイヤ~な予感がし始めていた頃…
ソースコードを眺めていました。こんなコードです。
if( !flag ) ;
throw SomeException ;
ん~、やっぱりflagが'false'になってるから例外が飛ぶんだよなぁx?
あ"っ!!!!
if( !flag ) ; ← コレなに?!
throw SomeException ;
金曜日の夜にバタバタ修正した箇所でした。。集中して仕事しなきゃ~
私の場合は・・・。
Visual Basicのソースをいじった直後にCのソースコードをいじって、switch~caseをselect~caseと書きました。
当然コンパイルエラーですが、VBの直後だったので何でエラーなのか分からず、30分ぐらい悩みました
我が身に降りかかってくると、つまんね~と思ったことでしょう。 (^^;
私なら、{}を必ず書きます。それもBSDスタイルで。(↓の左)
if (~) { if (~)
... {
} ...
}
あと、構造エディタを使えば、この手のヒューマンエラーは発見しやすいでしょうね。
if (~) {
...
}
if (~)
{
...
}
梅成さん、
そうなんですよ~
コンパイルエラーにならないんですよねぇ (T-T
意味の無いセンテンスですよ~くらいのワーニング出してくれたって良さそうなんですが(--;
たしかにif文の中に処理文そのものを書くこともできますけどね…
> VBの直後だった
VBはすっかり忘れて、selectってなんだっけ?って感じです(^^;
miyaさん、
> つまんね~と思ったことでしょう。 (^^;
それはもう。。
苦笑いしながら、コンパイルして、動かしたら動いて、もう笑うしかありません(^^;
私も一行であっても{}つけて、BSDスタイル(ってんですかね?)で書くのが趣味なんですが、チームのデファクト(?)が違うんですよ~(泣
Cの最初のマニュアル本 The C programming language (K&R;白本)もこれで書かれていたので、このスタイルの愛用者は多いです。但し、私のように昔の人かな。(^^;
最近では、if ()の一行下に{を書く事も多いでしょう。
編集はし易いのですけど、ubarさんの遭遇したような誤りも発生し易いですね。
人間はこういう間違いを簡単にするから、やはりコーディングスタイルを強制する、何らかの構造エディタを義務づけないといかんでしょうね~。
私も古いかも (^^;
コーディングスタイルは強制してもらった方がいいですね~
チームで開発する場合は特に。
ある程度でも形式がそろってないと、お互いが書いたコードが分かりにくくて仕方ありません(^^;
ところで、構造エディタってなんなんでしょう(^^;;
エディタが言語構造を知っていて、インデントを行ったり、括弧などの補完を行ったり、キーワードをボードルドや色を付けたりできます。
これを構造エディタと言います。
既存のソースを読み込んだ時に、リフォーマットを行えれば、つまらないバグやコーディングミスをある程度防げますし、同じスタイルでコーディングできます。
eclipseなどのIDEエディタが構造エディタ機能を持っていると思います。
汎用だと、emacsのc-modeなどが有名です。
一時、indentコマンドを使って整形していたのですが、なぜかすぐに使われなくなりました(汗;
ちなみに、普段はeclipse+CDT使ってます (^^;
emacsのc-modeも2年くらい前までは使ってましたね~
Windowsで軽快に動くemacsがあれば使いたいんですけど…
Windows上ではMeadowっちゅうのがあります(http://www.meadowy.org/meadow/)。
最近ではNetinstallっていう(http://www.meadowy.org/meadow/netinstall)、必要なパッケージを自動でダウンロードしてきてくれるツールも登場して、(昔に比べて)とっても使いやすくなってます。
meadowは何年か前に使ってました~
微妙にemacsと違うのが受け付けなくて、使わなくなりました(^^;
まったく違えばいいんでしょうけどねぇ。
> (昔に比べて)とっても使いやすくなってます
おぉ~、ありがとうございます。
明日、会社で試してみます(^^