未定義動作とは?
未定義動作とは、C言語規格が結果を一切規定していない操作。符号付き整数のオーバフロー、配列外アクセス、初期化前の変数参照などが該当し、コンパイラは何をしてもよい。試験では最適化によって挙動が変わる原因として問われる。
エンベデッドシステムスペシャリスト試験の過去問では1回出題されています。
みていぎどうさ
未定義動作の意味
C言語規格が結果を一切規定していない操作。符号付き整数のオーバフロー、配列外アクセス、初期化前の変数参照などが該当し、コンパイラは何をしてもよい。試験では最適化によって挙動が変わる原因として問われる。
未定義動作の具体例
符号付きintのオーバフローを前提にした範囲チェックは、コンパイラが「オーバフローは起きない」と仮定して条件式ごと削除することがある。最適化を-O0から-O2へ上げた途端に動かなくなる典型例で、規約で禁止される。
未定義動作は試験でどう引っ掛けられる?
処理系定義動作(右シフトの符号拡張など、処理系が決めて文書化する)や未規定動作(評価順序など、選択肢の中から決まる)とは別物。デバッグ版で動いたからといって、定義された動作になったわけではない。
未定義動作と関連する用語
未定義動作が出た過去問
最終更新:2026-08-25/解説は資格暗記が独自に作成しています。 過去問の出典は各問題に記載のとおりです。