关于++运算符关联性的歧义

时间:2014-11-14 11:49:25

标签: c associativity

“C如何编程第6版 - 第119页”说,++运算符的关联性是“从右到左”。我想知道这是什么意思,因为++是一元运算符,所以在什么情况下我可能会遇到一元运算符的相关性?你能举个例子吗?

另一方面,一些网络资源根据其状态(前缀或后缀)为++运算符提供不同的关联性。虽然本书给出了后缀和前缀的“从右到左”的关联性,但哪一个是正确的?

如果你给我一个例子,我会感激不尽的?相关性也是如此。

谢谢和问候

3 个答案:

答案 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,尽管其他语言可能允许这类事情。