2012-05-10 10 views
1

未定義の動作はC++のコンパイラによって異なりますか?未定義の動作はC++のコンパイラによって異なりますか?

すべてのコンパイラには、あらゆる問題に対して独自の動作があります。

+1

コンパイラ、アーキテクチャ、環境によって異なります。 – slowpoison

+6

どうすればいいですか?はい ?未定義は未定義です。ヌーポインターの逆参照が標準によって許可されている間、マーラーの第6シンフォニーを演奏する。非建設的なものとして閉じる投票。定義されていない振る舞いを説明することは、いくつかの非常に特殊な場合にのみ価値があります。 –

答えて

1

未定義の動作を構成するものは、C++標準で規定されています。

定義されていない動作を示すコードをコンパイラが実行するときに生成されるコードは、定義上何でもかまいません。これは、コンパイラライターに最適化のための余裕を与えることです。

未定義の動作は、プログラムが何かを行うことができることを意味します。クラッシュや例外のスロー、メモリの特定領域への書き込みを保証するものではありません。ご存じのように、ファイルシステム全体を削除してからごみを取り出すことができます。これはC++標準でも問題ありません。

未定義の動作から離れてください。

+0

私はそれが最適化のための余裕とは関係ないと確信しています。 –

+0

おそらく、最適化は正しい言葉ではありませんでした。これは通常、標準的な動作を定義することで、すべてのアーキテクチャでサポートするのが困難または非効率になる場合に使用されます。したがって、開発者がより簡単にできるようにするには、指定されたアーキテクチャーにとって最も簡単で効率的なものを実行できるようにするだけです。何度も何もしないで、プログラムを矛盾した状態にしておくことが多いのです。 –

1

未定義の動作はC++のコンパイラによって異なりますか?

はい。それは次のように主張することができ

まあ定義された動作は、標準に準拠しており、同様にうまくすべて コンパイラによってサポートされています。

したがって、

未定義の動作が標準に準拠していないとコンパイラは、彼らがやりたいこと自由に です!未定義の動作について

2


C++標準のセクション1.3.24状態:

許容未定義の動作は予期しない結果と完全に状況を無視してから、中の翻訳またはプログラム実行中に動作の範囲(診断メッセージの発行の有無にかかわらず)環境の特徴を文書化した方法、(診断メッセージを発行して)翻訳または実行を終了することなどが含まれる。

はい、はい、コンパイラは、未定義の動作が発生したときに任意の動作を自由に表示できます。

3

未定義は実際には未定義を意味します。つまり、何かが起こる可能性があります。

コンパイラに依存できますか?はい。

すべてのコンパイラは同じことができますか?はい。

明日は今日は1つのことをすることができますか?はい。

プログラムをクラッシュさせることはできますか?はい。

私はそれがうまくいくと思いますし、うまくいくようですか?はい。

何かが起こる可能性があります。

関連する問題