首页 > 后端开发 > C++ > C99 和 C 代码的哪些差异会导致编译错误?

C99 和 C 代码的哪些差异会导致编译错误?

Barbara Streisand
发布: 2024-12-16 09:23:11
原创
575 人浏览过

What C99 and C   Code Differences Cause Compilation Errors?

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中文网其他相关文章!

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