我尝试理解 C 语言中一元运算符背后的语法。根据此版本的标准link,第 6.5.3 节中的一元运算符具有以下语法:
unary-expression:
...
++ unary-expression
...
这意味着从语法的角度来看,这样的事情是合法的:
a = ++++b
。然而,gcc 编译器提供了这个错误:lvalue required as increment operand
。
我不太明白为什么?
根据标准,
++b
相当于(b += 1)
。这意味着 a=++++b
应扩展为 a=((b+=1)+=1)
。为什么编译器会出现上面的错误?
在 C 语法中,
++b
不是左值,因此不能是 ++
运算符的操作数。
请注意,C++ 语法在这方面可能有所不同。