
兼容性矩阵重点在于C不是C语言的超集且一些典型示例在C20或C23中发生了变化正确答案取决于语言模式。此表只是指引不能替代示例在窄屏幕上下面各节内容比完整矩阵更易读。指定初始化器有但不是C语言的版本2019年的文章提到C中没有指定初始化器并指出C20可能会引入这个预测很准。C20为聚合初始化添加了指定初始化器但与C语言习惯功能不同C指定符有诸多限制。空参数列表C语言向C靠拢这曾经是C语言和C差异最明显的例子之一。C23消除了这种差异但带来了迁移问题。void*、malloc和对象生命周期陷阱简单的不兼容性没有改变。C20缩小了malloc无法提供对象的情况但修复有限。const_cast编译通过不等于行为定义明确C要求在丢弃const时必须显式操作类型转换后写入const对象是未定义行为但有有效使用场景。枚举比“C语言使用int”更复杂对于C17和C23枚举情况不同且与C模型不同。C中枚举类型转换有规则。restrictC语言的承诺而非C的契约C99引入restrict标准C没有该关键字部分编译器有扩展。柔性数组成员将其保留在边界处C99对柔性数组成员进行了标准化但不是标准C。C中有替代方式。迁移规则将C语言习惯迁移到C时需遵循明确语言模式、不混淆编译与行为定义等规则。