[C/C++] 暗黙の型変換

Posted by
ぴろり
Posted at
2004/11/04 17:47
Post Comment
コメントできます
Category
開発メモ カテゴリ
 久々のバグです。 char a と BYTE b が等しいことを期待した評価式が期待通りに動かないというもので 暗黙の型変換によって実は期待通りの比較がされていなかったというオチでした。
この記事をはてなブックマークに追加する この記事のはてなブックマーク数 | この記事をlivedoorクリップに追加する この記事のlivedoorクリップ数 | この記事をYahooブックマークに追加する この記事のYahoo!ブックマーク数 | この記事をdel.icio.usに追加する

 最初の実装がeq.1です。 a, b 共に内部表現は(1111 1111)ですから暗黙の型変換がされても 評価式は真になる(←ここがダウト)とものと思い込んでいました。 暗黙の型変換では『両方の値を不足無く表現できる符号付きの型に合わせる』らしいです。 この場合,左辺が(char) 0xff → -1,右辺が(BYTE) 0xff → 255ですから char の一つ上,両者を表現できる signed int に合わせて比較されることになります。 つまり実際のところ,eq.1は暗黙の型変換によってeq.2として評価されていたのでした。
 タネを明かせば何のことはないのですが10分ばかし頭を抱えてしまいました。 長年やってきて恥ずかしいバグです。

 対策を挙げるとすればeq.3またはeq.4となります。 今回,a が UDP パケットのバイトデータだったので 変数の意味を考えれば a は BYTE 型で宣言し直すのが筋かもしれません。


この記事を読んだ人はこんな記事も読んでいます ?

その他の関連する記事


コメントを投稿する

 (必須/公開)
 (必須/非公開)
 

コメントスパム防止のため投稿前に ランダムな数字 ? を入力してから投稿してください。 お手数ですがご協力のほど宜しくお願いいたします。(必須)