在2026年9月的Kernel Recipes会议上,生物医学工程教授马丁·尤克(他开发磁共振成像扫描仪的软件)发表了关于减少C语言未定义行为持续努力的演讲。他承认C语言已经历史悠久,但认为它仍然是一种有价值的语言,因为它跨平台可移植、历经数十年稳定、编译速度快,并且生成的机器码紧密贴合程序员的意图——这一原则通常被概括为‘所见即所得’。

此图片展示了文章第一段中讨论的演讲者马丁·尤克,他在Kernel Recipes 2026上发表了关于减少C语言未定义行为的演讲。
尤克解释说,当程序执行C标准未定义的操作时,就会出现未定义行为,例如读取未初始化的变量、除以零或访问结构体中的填充字节。在这些情况下,标准对编译器没有任何要求,编译器可能产生任何结果,有时会导致错误输出,俗称调用‘鼻子恶魔’。他举例说明:编译器可能会消除除以零的测试并直接存储一个常量,或者在存储到易失变量之前重新排序除法操作,当除数为零时会改变程序行为。
为了解决这些问题,C标准委员会维持着三个研究组,分别关注内存对象模型、内存安全和未定义行为。他们的工作已经从当前标准中大约100个未定义行为中移除了45个,这一点在正在进行的C2y草案中得到了体现。最近的改进包括位精确整数类型、检查的整数操作、case范围、命名的for循环以及用于确定数组长度的_Countof()宏。然而,在C语言中实现完全的内存安全仍然具有挑战性;尤克将问题分解为类型安全、空间内存安全(部分受益于边界检查和counted_by属性)以及时间内存安全(在没有昂贵的运行时检查或形式验证的情况下,使用后释放bug很难消除)。他建议,最实际的近期方法是将受限的语言子集与形式验证工具结合使用。