ホームページ >バックエンド開発 >C++ >一部の C コードが C でコンパイルに失敗するのはなぜですか?

一部の C コードが C でコンパイルに失敗するのはなぜですか?

DDD
DDDオリジナル
2024-12-18 10:16:10424ブラウズ

Why Does Some C Code Fail to Compile in C  ?

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 サイトの他の関連記事を参照してください。

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