“C如何编程第6版 - 第119页”说,++运算符的关联性是“从右到左”。我想知道这是什么意思,因为++是一元运算符,所以在什么情况下我可能会遇到一元运算符的相关性?你能举个例子吗?
另一方面,一些网络资源根据其状态(前缀或后缀)为++运算符提供不同的关联性。虽然本书给出了后缀和前缀的“从右到左”的关联性,但哪一个是正确的?
如果你给我一个例子,我会感激不尽的?相关性也是如此。
谢谢和问候
答案 0 :(得分:1)
“C如何编程第6版 - 第119页”说相关性 ++运算符是“从右到左”。我想知道这是什么意思, 因为++是一元运算符,所以在什么情况下我可能会遇到 一元算子的相关性?
Kernighan / Ritchie撰写的“C编程语言,第二版,ANSI C”也说明了这一点。显然,这个断言不区分前缀和后缀++
,但仍然可以认为是真的。考虑一元表达式 ++E++
。 (它在语法上是正确的,只是在语义上错误,因为它违反了操作数应该是左值的约束。)它不构成语法错误,相当于++(E++)
。我们是否可以观察到这种关联性取决于编译器错误消息的表达性。我们可以得到e。 G。 gcc通过使用类似的表达式--E++
告诉我们(--
具有与++
相同的优先级);它会产生一条消息
error: lvalue required as decrement operand
显示右侧的增量运算符首先关联。
答案 1 :(得分:0)
只有在将多个运算符应用于参数时,关联性才有意义。 组3中的所有运算符共享相同的优先级,如果您碰巧将该组中的多个运算符应用于参数,则将根据该组的关联性规则(在该情况下从右到左)解析。
~++x != ++~x
++确实是后缀中的LTR和前缀位置中的RTL。
答案 2 :(得分:0)
C语法由语法定义。 "优先级"和"关联性顺序"不属于C标准。 "优先级表"的目的是这样人类可以快速参考而无需阅读所有语法。有时这样的表格并不能完全捕获语法所做的一切。
由于运营商无法对运营商进行操作,因此使用"关联性"与一元运算符。我建议只是忽略任何这样的评论。
例如,E++++
只能是(E++)++
,而++++E
只能是++(++E)
。该语言不允许(++(++))E
,尽管其他语言可能允许这类事情。