1. ホーム
  2. c++

[解決済み] CがC++のサブセットでないのはどこですか?[クローズド]

2022-08-16 03:02:01

質問

CはC++のサブセットであると多くの本で読みました。

CはC++のサブセットであると書かれている本もあります。 細かい点を除けば .

C言語ではコンパイルできるが、C++ではコンパイルできない場合、どのようなケースがありますか?

どのように解決するのですか?

もし C89C++ とすると、以下のようになります。

C++で仮の定義がない

int n;
int n; // ill-formed: n already defined

int[]とint[N]は互換性がありません(C++では互換性のある型はありません)。

int a[1];
int (*ap)[] = &a; // ill-formed: a does not have type int[]

K&R関数定義スタイルなし

int b(a) int a; { } // ill-formed: grammar error

C++ではネストした構造体はクラススコープを持ちます。

struct A { struct B { int a; } b; int c; };
struct B b; // ill-formed: b has incomplete type (*not* A::B)

デフォルトのint型はありません

auto a; // ill-formed: type-specifier missing


C99 は他の多くのケースを追加しています。

パラメータの配列次元における宣言指定子の特別な取り扱いはありません。

// ill-formed: invalid syntax
void f(int p[static 100]) { }

可変長配列は不可

// ill-formed: n is not a constant expression
int n = 1;
int an[n];

フレキシブル配列のメンバがない

// ill-formed: fam has incomplete type
struct A { int a; int fam[]; }; 

エイリアシング解析に役立つ制限付き修飾子がない

// ill-formed: two names for one parameter?
void copy(int *restrict src, int *restrict dst);