スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


このエントリーをはてなブックマークに追加

warningに気を配る

忠告には用心せよ。この忠告に対してもだ。
Beware of advice - even this.

プログラムを組んでいるとどうしてもちょっとしたミスタイプをしてしまいます。変数名や関数名の間違いのようなものであれば、コンパイルエラーになってすぐ修正すれば終わりです。しかし、中にはコンパイルが通ってしまうというものもあり、実行時にバグを引き起こしてしまうことがあります。

例えば、よくある==と=の間違い。
if (flag = 1) {
  ...
}
val = 1は1を返す式として評価されるので、C/C++上の文法は満たしていますが、大抵の場合、これは、「flag == 1」の間違いでしょう。 これは、普段から「1 == flag」と定数値の方を左辺に持ってくるくせをつけているとある程度防げます。とはいえ、この方法は両辺が変数であったりすると使えないのと、可読性が低くなりがちなので敬遠されることもあります。

もうひとつよくあるミスタイプ別の例をあげると、switch分のdefaultのタイプミスです。
switch (char_type) {
case ALPHA:
  printf("this is alphavet\n");
  break;
case NUM:
  printf("this is numeric\n");
  break;
defualt:
  printf("this is unknown character\n");
  break;
}
defaultとかくべきところをdefualtと書いてしまっています。一見、コンパイルエラーになりそうな気もしますが、実際は、defualtはラベルとして認識されるため文法的にはエラーになりません。もちろん、動作は期待通りにはいきませんので、当然バグになります。

さて、これらのちょっとしたスペルミスはよくあるバグの原因ではありますが、コンパイラのwarningをチェックしていれば大抵気付くようなものです。大抵のコンパイラであれば、上記のような記述は文法的には正しいとは言え、ミスタイプの可能性が高いものとしてwarningを出してくれます。よって、コンパイル時にwarningに気を使うくせをつけておけば、すぐに修正して終わるようなものなのです。

プロジェクトによっては、コーディング規約で全てのwarningをなくすようにというところもあると思いますが、そうでなくても、普段からコンパイラからの警告には耳を傾けるようにしましょう。

【関連記事】
使用しない仮引数

【関連リンク】
C/C++バグ防止: defaultのスペルミスに気をつけろ!
明解プログラミングのすすめ (Cプログラミングの秘訣)

【関連書籍】
ライティングソリッドコード―バグのないプログラミングを目指して スティーブ・マグワイア
C++プログラミングの処方箋―ひと味違うコードを書くための99の鉄則
プログラミング作法 ブライアン・カーニハン


このエントリーをはてなブックマークに追加

コメントの投稿

非公開コメント

人気エントリ
最近の記事
本のおすすめ

4274065979

4844337858

482228493X

4904807057

4873114799


最近のコメント
Links
プロフィール
  • Author:proger
  • 組み込み関係で仕事してます
ブログ内検索
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。