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で書く |
RSS | 管理者情報 | プライバシーポリシー |