约束

约束是所有现有 C 规范中使用的术语(最近的 ISO-IEC 9899-2011)。它们是标准第 6 节中描述的语言的三个部分之一(沿着语法和语义)。

ISO-IEC 9899-2011 将约束定义为:

限制,无论是句法还是语义,通过它来解释语言元素的阐述

(请注意,就 C 标准而言,运行时约束不是一种约束,并且具有完全不同的规则。)

换句话说,约束描述了语言规则,这将使语法上有效的程序成为非法。在这方面,约束有点像未定义的行为,任何不遵循它们的程序都不是用 C 语言定义的。

另一方面,约束与未定义的行为有很大的不同。即,如果违反约束,则需要在转换阶段(编译的一部分)期间提供诊断消息的实现,该消息可以是警告或可以停止编译。