C からの微妙な逸脱
C は C のサブセットであると広く信じられていますが、詳しく調べると微妙な違いが明らかになります。 C でコンパイルされるコードが C で障害に遭遇する例をいくつか示します。
暫定的な定義がない
C では、暫定的な定義がある C とは異なり、変数の再定義は違法です。定義により、後続の再定義が可能になります。
配列タイプ非互換性
C は、サイズのある配列型とサイズのない配列型を区別するため、int[] と int[N] に互換性がありません。ただし、C では、これらを区別なく使用できます。
K&R 関数構文
C では、関数パラメータ リストが戻り値の型に直接続く K&R スタイルの関数定義が許可されていません。 .
ネストされた構造体Scope
C は、クラス スコープを持つようにネストされた構造体を定義しますが、C はローカル スコープの以前の動作に従います。
Default int
C では、デフォルトで次のように使用される C とは異なり、明示的な型指定子なしで "auto" を使用することは無効です。 int.
追加の C99 非互換性
C99 ではさらに不一致が導入されました:
配列次元指定子
C関数パラメータの配列次元での宣言指定子を禁止します。
可変長配列
C では可変長配列のサポートが省略されていますが、C では非定数サイズの配列を宣言することで可変長配列を許可しています。
フレキシブル配列Members
C には、C に存在する機能である構造体内の柔軟な配列メンバーがありません。
Restrict Qualifier
C では、制限修飾子が導入されています。エイリアシング分析を支援しますが、C ではサポートされていません。
以上がコンパイルと構文の点で、C は C とどのように微妙に異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。