08/05/05 16:07:28
「規格が明確に定義していない」には3種類あって、以下のように定義されている。
・処理系定義(implementation defined)の動作
どう動作するかを実装が選択する。そのプログラムがコンパイルできないというのは許されない。
(この構成概念を使ったプログラムは誤りというわけではない。)
(実装が)何を選んだかは(コンパイラの作者が)文書にしておかなければならない。
規格が合法な動作をいくつか用意していてそこから選ぶことができるかもしれないし、
必要条件をとくに課していないかもしれない。
・未規定(unspecified)の動作
処理系定義の動作に似ている。ただし、どういう動作を選んだかは文書にする必要がない。
・未定義(undefined)の動作
本当に何が起きても不思議はないことを意味する。規格は何の必要条件も課さない。
コンパイルできないかもしれないし、誤った動きをするかもしれないし
(クラッシュしたり黙って誤った結果を出したり)、
あるいはたまたまプログラマの意図したとおりの動きをするかもしれない。
以上、CFAQより抜粋