Reducing undefined behavior in the C language
6 hours ago
- C语言因其可移植性、稳定性、快速编译和性能而仍然是一种出色的语言。
- 未定义行为(UB)源于历史上的硬件多样性,赋予了编译器极大的自由度,导致不可预测的优化和分歧。
- C23和C2y标准已移除了许多UB实例;C23移除了旧式定义、符号-数值表示支持和三字符组,同时增加了位精确类型和检查的整数运算。
- 编译器警告、静态分析器、清理工具和形式验证等工具有助于检测和缓解UB。
- C语言中的内存安全分为类型安全、空间安全和时间安全;通过注解、工具和像CHERI这样的架构可以实现改进。
- 完全的内存安全可能需要昂贵的运行时检查或形式验证;受限语言与形式验证的结合提供了近期的前景。