ホームページ >バックエンド開発 >C++ >未定義の動作と「不正な形式であり、診断は必要ありません」: 違いは何ですか?

未定義の動作と「不正な形式であり、診断は必要ありません」: 違いは何ですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-02 16:14:12787ブラウズ

Undefined Behavior vs.

未定義の動作と「形式が正しくない、診断は不要」の違い

C 標準では、プログラムの動作をさまざまなカテゴリに分類します。 -形式的、不正な形式、未指定、および未定義。 「未定義の動作」とは、標準が実装の応答に関する要件や仮定を規定していない状況を指します。対照的に、「不正な形式の」プログラムは、構文または意味論的な規則に違反しており、適切な形式であるとはみなされません。

「不正な形式; 診断は必要ありません」というフレーズが標準に含まれており、一見、次の定義と矛盾しています。不正な形式のプログラム。この標準によれば、準拠する実装は整形式のプログラムを受け入れて実行する必要がありますが、拡張機能を使用する場合を除いて、整形式でないプログラムに対する要件はありません。

この矛盾は、C 言語が標準は C 標準からインスピレーションを得ており、特に明記されていない限り、すべてのエラーは未定義の動作と見なされます。ただし、C 標準は、デフォルトですべてのエラーに対して診断を要求することを目的としていました。

最終的に、「診断は必要ありません」の存在は、問題の動作が未定義とは見なされないことを示します。これが「未定義の動作」と異なるのは、標準がコンパイラにエラーや警告を発行せずにコンパイルと実行を継続することを明示的に許可している点だけです。この区別は主に、文法上のエラーではなく、実行時の問題を説明するために使用されます。

要約すると、「不正な形式; 診断は必要ありません」という用語は混乱を招くように思えるかもしれませんが、本質的には未定義の動作と同じ意味です。これは、プログラムが整形式ではないにもかかわらず、コンパイラーが診断を提供せずに処理を続行できる状況を表します。主な違いは、「不正な形式; 診断は必要ありません」は通常、実行時の問題を指すのに対し、「未定義の動作」には文法エラーと実行時の問題の両方が含まれることです。

以上が未定義の動作と「不正な形式であり、診断は必要ありません」: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。