C の不完全性: C がそのサブセットから分岐する場所
C は C 内に完全に含まれているという頻繁な主張にもかかわらず、微妙な区別によってこれが表現されます。アサーションが不完全。この記事では、C で受け入れられるコードが C で互換性がなくなる例に焦点を当て、両者を区別する相違点に光を当てます。
複雑な定義性
C では、変数に対してより厳格なルールが適用されます。定義、仮性を禁止する。 int n のように、同じ変数を繰り返し宣言します。 int n; は、C とは異なり、 C では許可されません。
配列互換性の相違
C では、C には存在しない型互換性制約が導入されています。C では、配列 int a[1] は、型が異なっていても (int[] とint[1])。この代入は C では失敗します。
廃止された関数定義
C は関数定義の K&R スタイルを放棄し、 int b(a) int a; のような構造をレンダリングします。 { } 構文が正しくありません。
ネストされた構造体のスコープの違い
C のネストされた構造体には、C とは異なりクラス スコープがあります。したがって、ネストされた構造体を囲んでいる構造体の外側で宣言することになります。 struct B b; などの定義により、C で不完全な型エラーが発生します。 .
明示的な型指定子が必要
C では、すべての宣言に明示的な型指定子を必須とします。 auto a; のように型情報を省略すると、構文エラーが発生します。
C99 がさらに不一致を引き起こす
C99 では、次のような追加の非互換性が導入されます。
以上がC のより厳格なルールは、C のより寛大なアプローチとどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。