C のサブセットとしての C : 例外の説明
C は C のサブセットであるとよく言われますが、場合によってはコードは C ではシームレスにコンパイルできますが、C では失敗します。
ケースC でコードが失敗する場所
暫定的な定義:
C では同じ変数名の複数の宣言が許可されていますが、C ではこれを禁止しており、エラー "もうすでに"
互換性のない配列型:
C では、配列を異なる型のポインターに割り当てることができます (例: int[1] から int *) ())、C ではそのようなことは禁止されています
K&R 関数定義スタイル:
C では、構文 int b(a) int a; を使用した関数定義が許可されます。 { } ですが、C はこれを文法エラーとみなします。
Nested Struct Scope:
C では、クラス スコープを使用してネストされた構造体を宣言できますが、 C はそれらをローカル変数として扱います
デフォルトの宣言:
C では、型を指定せずに変数を宣言できます (例: auto a;)。ただし、C では明示的な宣言が必要です。 type-specifier.
C99 の追加の例外
パラメータの配列次元:
C99 では配列内の static などの指定子を禁止しています関数パラメータの次元。
可変長配列:
C99 は、配列サイズが計算される可変長配列 (VLA) をサポートしていません。 runtime.
フレキシブル配列メンバー:
C99 には、可変サイズのデータ メンバーを内部に持つことができるフレキシブル配列メンバー (FAM) がありません。 structs.
Restrict 修飾子:
C99 では、Restrict 修飾子でメモリの非エイリアシングを指定できますが、これは C ではサポートされていません。
以上が一部の C コードが C でコンパイルに失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。