Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

lvalue required as increment operand error

#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", ++(-i)); // <-- Error Here
}

What is wrong with ++(-i)? Please clarify.

like image 428
Wei Avatar asked Jun 03 '11 17:06

Wei


3 Answers

-i generates a temporary and you can't apply ++ on a temporary(generated as a result of an rvalue expression). Pre increment ++ requires its operand to be an lvalue, -i isn't an lvalue so you get the error.

like image 130
Prasoon Saurav Avatar answered Oct 21 '22 08:10

Prasoon Saurav


The ++ operator increments a variable. (Or, to be more precise, an lvalue—something that can appear on the left side of an assignment expression)

(-i) isn't a variable, so it doesn't make sense to increment it.

like image 5
SLaks Avatar answered Oct 21 '22 08:10

SLaks


You can't increment a temporary that doesn't have an identity. You need to store that in something to increment it. You can think of an l-value as something that can appear on the left side of an expression, but in eventually you'll need to think of it in terms of something that has an identity but cannot be moved (C++0x terminology). Meaning that it has an identity, a reference, refers to an object, something you'd like to keep.

(-i) has NO identity, so there's nothing to refer to it. With nothing to refer to it there's no way to store something in it. You can't refer to (-i), therefore, you can't increment it.

try i = -i + 1

#include <stdio.h>

int main()
{
   int i = 10;
   printf("%d\n", -i + 1); // <-- No Error Here
}
like image 1
Lee Louviere Avatar answered Oct 21 '22 08:10

Lee Louviere