When I try to compile this code
int main() {
int i = 0;
++(++i);
}
I get this error message.
test.c:3:5: error: lvalue required as increment operand ++(++i); ^
What is the error message saying? Is this something that gets picked up by the parser, or is it only discovered during semantic analysis?
++i
will give an rvalue1 after the evaluation and you can't apply ++
on an rvalue.
§6.5.3.1 (p1):
The operand of the prefix increment or decrement operator shall have atomic, qualified, or unqualified real or pointer type, and shall be a modifiable lvalue.
1. What is sometimes called "rvalue" is in this International Standard described as the "value of an expression". - §6.3.2.1 footnote 64).
A lvalue is a value you can write to / assign to.
You can apply ++
to i
(i
is modified) but you cannot apply ++
to the result of the previous ++
operator. I wouldn't have any effect anyway.
Aside: C++ allows that (probably because ++
operator returns a non-const reference on the modified value)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With