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

标签 c associativity

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

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

如果你给我一个关于 ?关联性也是如此。

感谢和问候

最佳答案

"C How to Program 6th edition - page 119" says that the associativity of ++ operator is "right to left". I wonder what does this mean, because ++ is a unary operator so in what case I may experience the associativity of a unary operator?

Kernighan/Ritchie 的《The C Programming Language, Second Edition, ANSI C》也是这么说的。显然这个断言不区分前缀和后缀++,但仍然可以被认为是正确的。考虑一元表达式 ++E++。 (它在语法上是正确的,只是在语义上是错误的,因为它违反了操作数必须是左值的约束。)它不构成语法错误并且等同于 ++(E++)。我们能否观察到这种关联性取决于编译器错误消息的表达能力等。我们可以得到e。 G。 gcc 通过使用类似的表达式 --E++ 告诉我们(--++ 具有相同的优先级);它产生一条消息

error: lvalue required as decrement operand

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

关于c - 关于++ 运算符关联性的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26929362/

相关文章:

c - 在gdb中打印结构元素

haskell - (<$>) 如何保留关联性

c - *p++->str : Understanding evaluation of ->

parsing - 用 `Parsec` 解析各种二元函数链的正确方法?

c - 手动继续循环

将数组的一部分复制到 C 中的第二个数组

c - 如何使用动态内存分配创建(二维)数组

c - 随机数和多个 srand 调用

c -++struct.field 中的运算符层次结构

scala - 具有反向关联中缀表示法的柯里化(Currying)函数的部分应用语法