未規定の動作 | Programming Place Plus 用語集

トップページ用語集

名称

解説

C言語や C++ において、とりうる動作の選択肢が複数あり、標準規格としてその可能性を提示することはあっても、選択を強制することはなく、処理系が選択することになっているものです。

未規定の動作に関しては、処理系がその動作について文書化することを求めていません。

標準規格では次のように定められています。C言語では、

この規格が,二つ以上の可能性を提供し,個々の場合にどの可能性を選択するかに関して何ら要求を課さない動作。
(JIS X 3010:2003 3.4.4 未規定の動作 より)

C++ では、

適格プログラムと正しいデータとの組合せに対する動作であって,処理系に依存する動作。処理系は,どんな動作が生じるかについて文書を用意する必要はない。
参考 多くの場合,どんな動作が生じうるかについて,この規格の中で示唆する。
(JIS X 3014:2003 1.3.13 未規定の動作 より)

です。


未規定の動作に似たものに、処理系定義の動作があります。これも、規格側が動作の選択を強制せず、処理系の選択に委ねていますが、処理系が文書化することを求めている点に違いがあります。

未規定の動作は多数ありますが、たとえば、静的変数初期化される順番や、関数実引数評価される順番などがあります。

未定義の動作と違って、未規定の動作を含んだプログラムは必ずしも避けなければならないわけではありません。しかし、文書化されていない動作ですから、プログラムを書いた時点での処理系が採用している動作に依存しないようにはするべきです。さきほど挙げた例でいえば、初期化の順番や、評価の順番に依存しないようにプログラムを書くことは可能です。


参考リンク

更新履歴


用語集のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る