[解決済み] 未定義の動作を含むソースコードがコンパイラをクラッシュさせることは合法ですか?
質問
未定義の動作を呼び出すため、(よく言われるように) "anything can happen" となる、お粗末に書かれた C++ ソースコードをコンパイルしに行ったとしましょう。
C++ 言語仕様が "conformant" コンパイラーで許容されるとみなすものの観点から、このシナリオにおける "anything" にはコンパイラーのクラッシュ (または私のパスワードの盗難、あるいはコンパイル時の誤動作やエラー出力) が含まれますか、それとも未定義の動作の範囲は結果の実行可能ファイルを実行したときに何が起こるかに特に限定されますか?
どのように解決するのですか?
未定義動作の規範的な定義は以下の通りです。
この国際規格が要求していない行動
[注:この国際規格が動作の明示的な定義を省略している場合、またはプログラムが動作の定義に違反している場合、未定義の動作が予想されます。 動作の明示的な定義が省略されている場合、またはプログラムが誤った構成や誤ったデータを使用した場合 誤った構成やデータを使用した場合、未定義の動作が発生する可能性があります。許容される未定義の を完全に無視することから、予測できない結果をもたらすことまで、さまざまな動作があります。 予測不可能な結果をもたらす完全な無視から,翻訳中またはプログラム実行中に 環境に特徴的な文書化された方法で実行する。 (診断メッセージの発行の有無にかかわらず)、翻訳または実行を終了させることまでです。 翻訳または実行を終了する(診断メッセージの発行あり)。 を発行する)。多くの誤ったプログラム構成は,未定義の動作を発生させない。 診断が必要である。定数式の評価 式の評価は、未定義として明示的に指定された振る舞いを示すことはない。 - エンドノート]
このノート自体は規範的なものではありませんが、実装が示すことが知られている動作の範囲を記述しています。そのため、コンパイラーをクラッシュさせる (翻訳を突然終了させる) ことは、その注意書きによると正当なことです。しかし実際には、規範的な文章にあるように、この規格は実行と翻訳のどちらにも境界を設けていません。もし実装があなたのパスワードを盗んだとしても、それは標準に定められたいかなる契約にも違反しません。
関連
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】1つ以上の多重定義されたシンボルが見つかる
-
[解決済み】変数やフィールドがvoid宣言されている
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み] Collatz予想の検証を行うC++のコードは、なぜ手書きのアセンブリよりも高速に動作するのでしょうか?
-
[解決済み] C++の規格では、初期化されていないboolがプログラムをクラッシュさせることは可能ですか?
-
[解決済み] 構造体ハック」は技術的に未定義な動作なのでしょうか?
-
[解決済み] 動作が未定義のブランチは到達不可能とみなし、デッドコードとして最適化することができますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】C++エラーです。"配列は中括弧で囲まれたイニシャライザーで初期化する必要がある"
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】標準ライブラリにstd::endlに相当するタブはあるか?
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】C++ - ステートメントがオーバーロードされた関数のアドレスを解決できない。
-
[解決済み】std::cin.getline( ) vs. std::cin
-
[解決済み】デバッグアサーションに失敗しました