哪里C不是C的子集?

我在很多书中读到C是C的一个子集.

有些书说C是C的一个子集,除了细节之外.

什么情况下代码将在C中编译,但不是C?

最佳答案
如果你将C89与C进行比较,那么这里有几件事

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);

转载注明原文:哪里C不是C的子集? - 代码日志