C++ 设计时保留了对 C 的广泛兼容性,但并非 100% 兼容,存在若干关键差异。
C 代码通常可在 C++ 编译器中编译,但需注意以下不兼容点:
| 差异 | 说明 |
|---|---|
| 类型检查更严格 | C++ 不允许 void* 隐式转换,C 允许 |
| 新增关键字 | new、delete、class、bool 等不可用作变量名 |
| 函数重载 | C++ 支持同名函数重载,C 不支持 |
| 结构体扩展 | C++ 结构体可包含函数和构造函数 |
| 默认参数 | C++ 支持函数默认参数,C 不支持 |
| 初始化表达式 | C++ 允许复杂表达式初始化,C 仅支持常量表达式 |
实践中,许多项目用 C++ 编译器编译 C 代码,以获得更严格的类型检查。迁移大型 C 项目时建议逐步处理不兼容问题。