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

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

Barbara Streisand
Barbara Streisandオリジナル
2024-11-21 12:40:16589ブラウズ

What's the Difference Between C  's

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

C 仕様では、未定義、未指定、実装定義、エラーなど、さまざまなタイプのプログラム動作が定義されています。 、そして形が悪い。いくつかの区別は比較的明確ですが、「不正な形式; 診断は必要ありません」という用語は、その正確な意味について疑問を引き起こしています。

定義

不正な形式: A構文または診断可能な意味規則に違反するプログラム。

未定義動作: 標準が実装の動作について何の仮定も要件も設けていないプログラムの動作。

エラー: プログラムが不正な形式であることを示すために標準で使用される用語。

整形式: に準拠したプログラム。構文と診断可能な意味規則。

「不正な形式であるため、診断は必要ありません」の場合

この特定の文言は、実装が新しい構文または動作を導入する方法で言語を拡張するときに表示されます。標準によれば、このような拡張機能は不正な形式とみなされますが、実装では診断メッセージを発行しないことが許可されています。

未定義の動作との区別

ここでの重要な違いは、未定義の動作が明示的に行われていることです。 「不正な形式; 診断は必要ありません」は、プログラムの誤った性質を認めていますが、実装が明確なエラーを提供せずに違反を許可する特定のケースを指します。

コンパイルと実行への影響

不正な形式のプログラムは、技術的にはコンパイルできません。ただし、「形式が正しくない; 診断は必要ありません」の場合、実装は技術的には警告なしにプログラムをサイレント コンパイルし、さらには実行することが許可されています。

一貫性の問題

標準の一貫性のない使用エラーに関する用語の多用により混乱が生じています。 「エラー」という用語は、診断が必要なエラーを意味しますが、1.3.13 の「注意」セクションでは、実装がそのような問題を黙って無視することを許可しています。

結論

微妙な違いがあるかもしれませんが、 「形式が正しくない、診断は必要ない」と「未定義の動作」の間には、標準の不一致があるため、明確な区別を付けることが困難になっています。結局のところ、両方の用語は、プログラムの動作が予測不可能であり、予期しない結果をもたらす可能性がある状況を指します。

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

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