🔀 制御構造
if (x = 5) と書いてもエラーにならず、条件がいつも成立してしまいます。gccは warning: suggest parentheses around assignment used as truth value [-Wparentheses]、clangは warning: using the result of an assignment as a condition without parentheses を出すだけで、コンパイルは通ってしまいます。
= は代入、== は比較です。x = 5 は「xに5を入れて、その結果である5を条件として使う」という意味になります。5は0ではないので、条件は常に真になります。逆に if (x = 0) なら常に偽です。
条件式では必ず == を使います。再発防止は、-Wall を付けてコンパイルし、警告ゼロの状態を保つこと。定数を左に書く if (5 == x) (ヨーダ記法)にしておくと、書き間違えたときに警告ではなくエラーになるので確実に気づけます。
もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。