Salma Ihab Hamed Asked: 2024-11-17 03:28:39 +0800 CST2024-11-17 03:28:39 +0800 CST 2024-11-17 03:28:39 +0800 CST C 语言中优先级顺序和求值顺序有什么区别? 772 我心里有一个具体的例子。 x = a +++ b; 这被评估为a++not ++b。但我不明白这是由于后缀的优先级顺序高于前缀,还是由于评估顺序是从右到左。 这两个术语有什么区别? c 2 个回答 Voted Best Answer 0___________ 2024-11-17T03:33:29+08:002024-11-17T03:33:29+08:00 C 和 C++ 编译器会积极处理标记,并根据它能找到的最长有效标记来拆分表达式。它由 C 标准定义 C11 标准,第 6.4 节,第 4 段 如果可以通过连接字符来形成“标记”以形成有效的关键字、标识符、常量、字符串文字、标点符或其他字符,则应选择尽可能大的“标记”。 John Bode 2024-11-17T13:56:51+08:002024-11-17T13:56:51+08:00 回答标题中的问题:优先级决定了运算符及其操作数的分组,但不决定子表达式的求值顺序。 鉴于表达 a + b * c *具有比+解析树更高的优先级 + / \ a * / \ b c 但a、b和中的每一个都可以按任何顺序c进行评估。 强制从左到右求值的运算符只有&&、||、?:和逗号运算符(与用于分隔函数参数的逗号不同)。 正如其他人指出的那样,您看到的结果是由标记化规则决定的,而不是运算符优先级或评估顺序。
C 和 C++ 编译器会积极处理标记,并根据它能找到的最长有效标记来拆分表达式。它由 C 标准定义
回答标题中的问题:优先级决定了运算符及其操作数的分组,但不决定子表达式的求值顺序。
鉴于表达
*
具有比+
解析树更高的优先级但
a
、b
和中的每一个都可以按任何顺序c
进行评估。强制从左到右求值的运算符只有
&&
、||
、?:
和逗号运算符(与用于分隔函数参数的逗号不同)。正如其他人指出的那样,您看到的结果是由标记化规则决定的,而不是运算符优先级或评估顺序。