首页 > 后端开发 > C++ > C 更严格的规则与 C 更宽松的方法有何不同?

C 更严格的规则与 C 更宽松的方法有何不同?

Barbara Streisand
发布: 2024-12-15 05:06:30
原创
157 人浏览过

How Does C  's Stricter Rules Differ from C's More Lenient Approach?

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 语法保持一致 (void f(int p[static 100]) { })。
  • 可变长度数组: C 禁止使用非常量表达式进行数组维度计算(int n = 1; int an[n];).
  • 灵活数组成员: C 不允许灵活的数组成员(struct A { int a; int fam[]; })。
  • 限制限定符: C 引入了用于别名分析的限制限定符,它们是C 中不存在 (void copy(int *restrict src, int *restrict dst);)。

以上是C 更严格的规则与 C 更宽松的方法有何不同?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板