C 的不完整性:C 与其子集的分歧
尽管经常声称 C 完全包含在 C 中,但细微的区别使得这一点断言不完整。本文重点介绍了 C 中可接受的代码在 C 中不兼容的情况,阐明了它们之间的差异。
复杂的确定性
C 对变量强制执行更严格的规则定义,禁止试探。重复声明同一个变量,如 int n; int n;, 在 C 中是不允许的,与 C 不同。
数组兼容性差异
C 引入了 C 中不存在的类型兼容性约束。在 C 中,数组 int a[1] 可以分配给指针 int (*ap)[] = &a,尽管其类型不同(int[] 与 int[] )整数[1])。这个赋值在 C 中会失败。
过时的函数定义
C 放弃了函数定义的 K&R 风格,呈现像 int b(a) int a 这样的结构; { } 语法不正确。
嵌套结构体作用域差异
C 中的嵌套结构体具有类作用域,与 C 不同。因此,在封闭结构体之外声明嵌套结构体定义,例如 struct B b;,会导致 C 中的不完整类型错误.
需要显式类型说明符
C 要求所有声明都使用显式类型说明符。省略类型信息,如 auto a;,会导致语法错误。
C99 会带来更多差异
C99 引入了额外的不兼容性:
以上是C 更严格的规则与 C 更宽松的方法有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!