ホームページ >バックエンド開発 >C++ >C のより厳格なルールは、C のより寛大なアプローチとどのように異なりますか?

C のより厳格なルールは、C のより寛大なアプローチとどのように異なりますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-15 05:06:30164ブラウズ

How Does C  's Stricter Rules Differ from C's More Lenient Approach?

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 構文 (void f(int p[static 100]) { }) と一致する必要があります。
  • 可変長配列: C では非定数式が禁止されています配列の次元計算の場合 (int n = 1; int an[n];).
  • 柔軟な配列メンバー: C は柔軟な配列メンバーを許可しません (struct A { int a; int fam[]; }).
  • 制限修飾子: C では、C にはないエイリアス分析用の制限修飾子が導入されています (void copy(int *restrict src, int *restrict dst);).

以上がC のより厳格なルールは、C のより寛大なアプローチとどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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