C言語なら俺に聞け(入門篇) Part 29at TECHC言語なら俺に聞け(入門篇) Part 29 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト50:デフォルトの名無しさん 08/06/02 13:51:34 >>47 そういう言い方すると単に評価の順序が不定みたいな感じがするが、 >>41のコードはコンパイルすら通らない可能性もあるし、実行時にエラーが発生する可能性もある。 51:デフォルトの名無しさん 08/06/02 13:52:18 >>49 ありがとうございます >>46様の言われている未定義動作と、言うのはコンパイラ別に判断される動作、ということなのですね 52:デフォルトの名無しさん 08/06/02 13:53:04 >>42 副作用完了点の間で同じ値を二度変更するのは常に未定義である。 未定義であるとは、その結果 ど ん な こ と が 起きても、 例えばパソコンが壊れるようなことがあったとしても、 規格もコンパイラもいっさい責任を持たないということである。 一般に言ってそのようなコードを書くことはまったく推奨されない。 少なくとも、全てを自己責任で行わなくてはいけない。 53:デフォルトの名無しさん 08/06/02 13:54:32 「規格が明確に定義していない」には3種類あって、以下のように定義されている。 ・処理系定義(implementation defined)の動作 どう動作するかを実装が選択する。そのプログラムがコンパイルできないというのは許されない。 (この構成概念を使ったプログラムは誤りというわけではない。) (実装が)何を選んだかは(コンパイラの作者が)文書にしておかなければならない。 規格が合法な動作をいくつか用意していてそこから選ぶことができるかもしれないし、 必要条件をとくに課していないかもしれない。 ・未規定(unspecified)の動作 処理系定義の動作に似ている。ただし、どういう動作を選んだかは文書にする必要がない。 ・未定義(undefined)の動作 本当に何が起きても不思議はないことを意味する。規格は何の必要条件も課さない。 コンパイルできないかもしれないし、誤った動きをするかもしれないし (クラッシュしたり黙って誤った結果を出したり)、 あるいはたまたまプログラマの意図したとおりの動きをするかもしれない。 以上、CFAQより抜粋 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch