“C How to Program 6th edition - page 119”说 ++ 运算符的结合性是“从右到左”。我想知道这是什么意思,因为 ++ 是一元运算符,所以在什么情况下我可能会遇到一元运算符的关联性?能给我举个例子?
另一方面,一些网络资源根据其状态(前缀或后缀)为 ++ 运算符提供不同的关联性。虽然这本书为后缀和前缀一起提供了“从右到左”的关联性,但哪一个是正确的?
如果你给我一个例子,我会非常感谢?关联性也是如此。
谢谢并恭祝安康
“C How to Program 6th edition - page 119”说 ++ 运算符的结合性是“从右到左”。我想知道这是什么意思,因为 ++ 是一元运算符,所以在什么情况下我可能会遇到一元运算符的关联性?能给我举个例子?
另一方面,一些网络资源根据其状态(前缀或后缀)为 ++ 运算符提供不同的关联性。虽然这本书为后缀和前缀一起提供了“从右到左”的关联性,但哪一个是正确的?
如果你给我一个例子,我会非常感谢?关联性也是如此。
谢谢并恭祝安康
“C How to Program 6th edition - page 119”说 ++ 运算符的结合性是“从右到左”。我想知道这是什么意思,因为 ++ 是一元运算符,所以在什么情况下我可能会遇到一元运算符的关联性?
Kernighan/Ritchie 的“The C Programming Language, Second Edition, ANSI C”也这么说。显然,这个断言没有区分 prefix 和 postfix ++
,但仍然可以被认为是正确的。考虑一元表达式 ++E++
。(它在语法上是正确的,只是在语义上是错误的,因为它违反了操作数应该是左值的约束。)它不构成语法错误并且等价于++(E++)
. 我们是否可以观察到这种关联性取决于编译器错误消息的表达能力。--E++
我们可以通过使用类似的表达式(与--
具有相同的优先级)来让 gcc 告诉我们++
;它产生一条消息
error: lvalue required as decrement operand
显示右侧的增量运算符首先关联。
仅当您将多个运算符应用于参数时,关联性才相关。第 3 组中的所有运算符共享相同的优先级,如果您碰巧将该组中的多个运算符应用于参数,它们将根据该组的关联规则(在这种情况下从右到左)进行解析。
~++x != ++~x
++ 确实是后缀的 LTR 和前缀位置的 RTL。
C 语法由文法定义。“优先级”和“关联性顺序”不是 C 标准的一部分。“优先表”的目的是让人们可以快速参考,而无需通读所有语法。有时这样的表并不能准确地捕捉到语法所做的一切。
由于运算符不能对运算符进行操作,因此将“关联性”与一元运算符一起使用没有多大意义。我建议忽略任何此类评论。
例如,E++++
只能是(E++)++
,而且++++E
只能是++(++E)
。该语言不允许(++(++))E
,尽管其他语言可能允许这种事情。