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

C の「形式が正しくありません。診断は必要ありません」と未定義の動作の違いは何ですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-25 10:26:17156ブラウズ

What's the Difference Between C  's

未定義の動作と不正な動作の違い、診断は必要ありません

間違いなく、C 標準では、「不明瞭」として分類される動作に対して広範な定義が導入されています。しかし、「プログラムの形式が正しくありません。診断は必要ありません」というフレーズは、他の動作カテゴリとの区別に関して疑問を引き起こしています。

適切な形式の動作と不適切な動作の定義:

C 標準では、プログラムを整形式か不正形式に分類します。適切に形式化されたプログラムは、構文と診断可能な意味規則の両方に準拠しています。逆に、不正な形式のプログラムはこれらのルールに違反するため、コンパイルしないことが理想的です。

実装定義、未指定、および未定義の動作:

実装定義および未指定の動作は次のとおりです。整形式の動作とは異なりますが、誤ったコードを意味するものではありません。前者の場合、実装はその特定のアクションを文書化する必要がありますが、後者の場合、文書化は必要ありません。一方、未定義の動作は、1.3.13.

コンパイラ、未定義の動作、および不正な形式のプログラム:

によれば、プログラムが間違っていることを意味します。 「エラー」という用語は、コンパイラーがエラー メッセージを表示してコンパイルを終了する必要があることを示唆していますが、C 標準では次のことが許可されています。未定義の動作をサイレントに処理します。特に、コンパイラは、未定義の動作が原因で警告を発行したりコンパイルを終了したりしないことがよくあります。

不正な形式のプログラムと診断要件:

「診断は必要ありません」の使用「不正な形式」と並んで、矛盾が生じます。不正な形式のプログラムをコンパイルすべきでない場合、コンパイラーがそれらを黙って無視できるようにすることは直観に反します。ただし、標準ではこの可能性が明示的に認められています。

結論:

「不正な形式; 診断は必要ありません」と「未定義の動作」の区別は依然として曖昧です。不正な形式のプログラムと不正なコード、および未定義の動作と実行時の問題との間に関連性がある可能性がありますが、これは常に一貫しているわけではありません。最終的には、「診断が不要である」という側面が最も重要です。これは、プログラムの形式が正しくない場合に診断生成の期待を無効にするためです。

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

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