[C/C++] if 文の条件記述で間違えやすいところ

備忘録として。

(1)

if 文の条件として、a==1 などとする代わりに、間違えて a=1 とすると、これは常に真となるので、ブランチのほうは実行されないことになります。

(2)

また、下記のようなケースでは、

ここで、b がもし 0 なら、ブランチが実行され、
b が0以外なら、メインが実行される、という感じになります。

(3)

Verilog などに慣れてしまうとやってしまうのが下記のようなケース。

~(チルダ)って単項演算子ですから、複数ビットだと、各ビットを反転するわけです。
となると、c が 1 であっても 0 であっても ~c はゼロではないので、常にメインのほうが実行されるようになります。
リントチェックやフォーマル検証すると、else のところが Dead code になるので、注意深く結果を検証すれば気づく可能性は高いです。が、コード書いている時点ではなかなか気づきません。

(1) とか (2) は、コンパイルの段階ではじいてくれるコンパイラもありますけどね。

タイトルとURLをコピーしました