C99 および C 互換性例外
C は一般に C のサブセットですが、C 言語の特定のニュアンスにより、一部のコンポーネントの直接コンパイルが禁止されています。有効な C コード。考慮すべき主な違いを以下に示します。
1.暫定的な定義はありません
C では、同じ名前の変数の複数の宣言が許可されますが、C では許可されません。したがって、次のコードは C では有効ですが、C ではコンパイルされません:
int n; int n; // ill-formed: n already defined
2。互換性のない配列型
C では、配列は int[] または int[N] 構文で宣言できます。ただし、C ではこれらの扱いが異なります。次のコードは C では有効ですが、C ではエラーが発生します:
int a[1]; int (*ap)[] = &a; // ill-formed: a does not have type int[]
3。 K&R 関数定義スタイルの禁止
C は K&R スタイルの関数定義をサポートしていますが、C はサポートしていません。次のコードは C では有効ですが、C ではコンパイルされません:
int b(a) int a; { } // ill-formed: grammar error
4。ネストされた構造体のスコープの違い
C では、ネストされた構造体はファイル スコープを持ちますが、 C ではクラス スコープを持ちます。これは、次のコードは C では有効ですが、C ではコンパイルできないことを意味します:
struct A { struct B { int a; } b; int c; }; struct B b; // ill-formed: b has incomplete type (*not* A::B)
5。デフォルトなし int
C では、C とは異なり、整数変数を int にデフォルト設定することはできません。そのため、C では有効な次のコードは、C ではエラーが発生します。
auto a; // ill-formed: type-specifier missing
C99 の追加の例外
これらに加えて例外として、C99 では C とのさらなる非互換性が導入されています。
以上がC99 と C コードのどのような違いがコンパイル エラーの原因となるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。