1

“C How to Program 6th edition - page 119”说 ++ 运算符的结合性是“从右到左”。我想知道这是什么意思,因为 ++ 是一元运算符,所以在什么情况下我可能会遇到一元运算符的关联性?能给我举个例子?

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

如果你给我一个例子,我会非常感谢?关联性也是如此。

谢谢并恭祝安康

4

3 回答 3

1

“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

显示右侧的增量运算符首先关联。

于 2015-06-29T07:28:00.343 回答
0

仅当您将多个运算符应用于参数时,关联性才相关。第 3 组中的所有运算符共享相同的优先级,如果您碰巧将该组中的多个运算符应用于参数,它们将根据该组的关联规则(在这种情况下从右到左)进行解析。

~++x != ++~x

++ 确实是后缀的 LTR 和前缀位置的 RTL。

于 2014-11-14T12:17:49.780 回答
0

C 语法由文法定义。“优先级”和“关联性顺序”不是 C 标准的一部分。“优先表”的目的是让人们可以快速参考,而无需通读所有语法。有时这样的表并不能准确地捕捉到语法所做的一切。

由于运算符不能对运算符进行操作,因此将“关联性”与一元运算符一起使用没有多大意义。我建议忽略任何此类评论。

例如,E++++只能是(E++)++,而且++++E只能是++(++E)。该语言不允许(++(++))E,尽管其他语言可能允许这种事情。

于 2015-06-29T08:05:13.543 回答