ホームページ >バックエンド開発 >C++ >C99 と C コードのどのような違いがコンパイル エラーの原因となるのでしょうか?

C99 と C コードのどのような違いがコンパイル エラーの原因となるのでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-16 09:23:11576ブラウズ

What C99 and C   Code Differences Cause Compilation Errors?

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 とのさらなる非互換性が導入されています。

  • パラメータの配列次元における宣言指定子の特別な処理はありません。
  • 可変長配列はありません。
  • 柔軟な配列はありません。 member.
  • エイリアスの制限修飾子がありません分析。

以上がC99 と C コードのどのような違いがコンパイル エラーの原因となるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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