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。 No Default int
与 C 不同,C 不允许将整数变量默认为 int。因此,以下在 C 中有效的代码将在 C 中引发错误:
auto a; // ill-formed: type-specifier missing
C99 中的其他例外
除了这些例外之外, C99 引入了与 C 的进一步不兼容性:
以上是C99 和 C 代码的哪些差异会导致编译错误?的详细内容。更多信息请关注PHP中文网其他相关文章!