C言語学習ポータル(無料版) 学習コンテンツ つまずきとエラー = と == を間違える

🔀 制御構造

= と == を間違える

どんなときに起きるか

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) (ヨーダ記法)にしておくと、書き間違えたときに警告ではなくエラーになるので確実に気づけます。

全員フリーパス(4コマ漫画)
4コマで見る「全員フリーパス」

アプリでしっかり学ぶ(無料・登録不要) つまずき一覧へ

同じ場面で起きやすいつまずき

do-while の最後のセミコロンerror: expected ';' before '}' token(clang: error: expec… switch の break 忘れ一致した case 以降の処理が全部実行されます。gcc: warning: this statement ma… 無限ループから抜けられない実行すると出力が止まらない、または画面が固まって戻ってきません。Ctrl+C で強制終了するしかない状態になりま…

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH