FC2ブログ

イージーバグ

今日はとあるCプログラムでバグがでてしまい、それの原因がずっとわからず、四苦八苦していました。

コンパイルは通るけど挙動がおかしい・・・しかもそれがどこからきているのかがつかみにくい・・・いちばんやっかいなケースの1つだと思います・・・。

なんどか痛い目にあったあと、最近はプログラムをより慎重に書くようになったせいか、めったにこういうバグには出くわさなくなったのですが、それでも起こるときは起こるものですね・・・。

土曜日なので夜を徹する覚悟でデバッグしていたら、ようやく原因が判明・・・。

なんと、数字のキャラクターを比較する際に、シングルクオートで囲むのを忘れていた!!!

こんな感じの不手際です:
if (chr==0){

たまたま文字が数字なのでコンパイルが通ってしまったのか・・・。

うう、なんというイージーバグなんだ・・・・・・・・。

現在、午前3時過ぎ・・・。

これはもう、寝るしかありません・・・。(^^;)

コメント

No title

 Delphiを使わないからバチが当たりましたね(笑)

 自分が最近間違えるのは、intのサイズ。
 どうしてもクセでintとshortを同じサイズと勘違いしちまう。
 最近は組み込みでSHを使うことが多いんだけど、こいつはintが32ビットなんです。
 for (i=・・・)とやるときのiを、前からのクセでつい「short i;」と宣言しちゃうんだけど、これは「long i;」とか「int i;」にする方がCの言語体系ではお得なはずですよね(実際にどの程度速度が違うのか、今度実機が来たらチェックしてみます)。

 プログラマー30歳定年説を遥かに超えて生き残ってるけど、やっぱりそろそろ脳みそが古くなってきたようで(^^;

Re: No title

>Mooさん

>  Delphiを使わないからバチが当たりましたね(笑)

確かに型付けが厳格なDelphiでは起こらない間違いですよね~。
DelphiからCをやったとき、なんでintにいろいろ入るのかと思いました(^^;)。

>  自分が最近間違えるのは、intのサイズ。
>  どうしてもクセでintとshortを同じサイズと勘違いしちまう。

あーーそれありますね!
私の場合はあまり組み込み系のプログラミングをする機会がないので、
ついうっかり範囲を間違えてしまいます・・・。

>  最近は組み込みでSHを使うことが多いんだけど、こいつはintが32ビットなんです。
>  for (i=・・・)とやるときのiを、前からのクセでつい「short i;」と宣言しちゃうんだけど、これは「long i;」とか「int i;」にする方がCの言語体系ではお得なはずですよね(実際にどの程度速度が違うのか、今度実機が来たらチェックしてみます)。

おお、パフォーマンスも最大化するとは、さすがですね~!
私は動いた時点で満足してしまうことも・・・。(^^;)

>  プログラマー30歳定年説を遥かに超えて生き残ってるけど、やっぱりそろそろ脳みそが古くなってきたようで(^^;

私も生涯現役でありたいと思います!
(プログラミングは好きなものに限りますが・・・。^^;)

No title

思わず、「あるある」と思ってしまいました^^;

自分は最近はJava言語とアセンブリを学んでいましたね。アセンブリは前から学んでいましたが、
アセンブリはデータを改変するときに色々と便利ですからね。人が上げたプログラムでも横から直せたりすることもあります^^

どの言語でもそうですが、うっかりのミスで数時間悩まされるのはプログラマー共通の悩みですね~・・・コンパイル時にエラーが出てくれた方がありがたいですが、そうでない論理的なエラーは本当に大変ですからね。

設計段階でもっとわかりやすく、効率よく考えて作らないとなぁ、と思う今日この頃です。
自分は精進あるのみですね。

Re: No title

>サンエタさん

> 思わず、「あるある」と思ってしまいました^^;
>
> 自分は最近はJava言語とアセンブリを学んでいましたね。アセンブリは前から学んでいましたが、
> アセンブリはデータを改変するときに色々と便利ですからね。人が上げたプログラムでも横から直せたりすることもあります^^

アセンブリとはまた凄いですね!
私はアセンブリはマイコン関係で少しかじったぐらいなので、
使いこなしている人を見ると感心します。(^^)

> どの言語でもそうですが、うっかりのミスで数時間悩まされるのはプログラマー共通の悩みですね~・・・コンパイル時にエラーが出てくれた方がありがたいですが、そうでない論理的なエラーは本当に大変ですからね。

そうですね~。いうなれば、セマンティックスエラーなんでしょうね。
シンタックスエラーの方がはるかにありがたいですよね。。

> 設計段階でもっとわかりやすく、効率よく考えて作らないとなぁ、と思う今日この頃です。
> 自分は精進あるのみですね。

私も精進します!(^^)

コメントの投稿

トラックバック


この記事にトラックバックする(FC2ブログユーザー)