在编程领域,理解控制运算符优先级和结合性的规则至关重要。虽然许多编程教科书提供了展示运算符优先级和结合性的图表,但根本问题仍然存在:谁定义了这些规则?
与普遍看法相反,ANSI C11 标准没有明确定义运算符优先级和结合性。相反,这些概念嵌入到语言本身的语法中。例如,C 语言中加法 ( ) 和减法 (-) 的语法产生规则表明,乘法表达式是加法表达式的子规则。这确定了这些运算符之间的优先级。
关联性决定如何对同一运算符的多次使用进行分组。例如,加法运算符是从左到右关联的,这意味着像“x y z”这样的表达式将被分组为“(x y) z”。
区分关联性和计算顺序非常重要。虽然这些概念相关,但它们是不同的。关联性决定分组,而求值顺序与表达式求值的顺序有关。
返回函数调用运算符的示例,从左到右关联性意味着“f()()()”将被分组为“(f())()”。此分组规则不会影响函数求值的顺序,函数求值仍然是无序的。但是,必须在应用运算符之前对操作数进行求值。
历史上,序列点用于定义 C 和 C 中的求值顺序。然而,该术语后来改为“之前测序”。这个概念意味着一个表达式的求值必须先于另一个表达式的求值。
总之,虽然运算符优先级和结合性表在编程教科书中很常见,但这些规则最终源自语言的语法。了解语法使程序员能够准确地解释表达式并确定其求值顺序。
以上是谁定义了 C 中的运算符优先级和结合性?的详细内容。更多信息请关注PHP中文网其他相关文章!