Return the kind of an expression in C, i.e., whether it's an rvalue or lvalue -
can print how expression being evaluated?
for example if wanted find out whether value being evaluated rvalue or lvalue i'd call hypothetical code:
int main() { if(isrvalue(*(int *)4)) return 0; else return 1; }
this creates problems we're discovering below 'type' of expression can depend on whether it's on right or left side of assignment operator. test more suited as
supports_lvalue(*(int *)4)
although again hypothetical , may left playing around basic examples.
the reason experimentation might useful in debugging if it's possible.
lvalue points storage location can assigned new values. variables including const
variables lvalues. lvalues persist beyond expression uses it. on other hand, rvalue temporary value not persist beyond expression uses it. lvalues may appear on left or right side of assignment operator. rvalues can never appear on left side of assignment operator.
in short: lvalues storage areas , rvalues values.
example:
int main(){ int = 10; int j = 20; int* ip; int* jp; /* ip , jp pointer variables, hence l-values. can appear both sides of = operator. shown below. */ ip = &i; jp = &j; jp = ip; /* values such 1, 25, etc values, hence r-values can appear right side of = operartor shown below, 1 on left causes error not ip */ ip + 1 = &i; // invalid ip = &i + 1; // valid, printf("%d", *ip); might print garbage value /* *ip , *jp l-values, including *(ip + 1) or *(ip + 2) can appear both sides */ *ip = 1 + *jp; return 0; }
you compilation error when incorrectly use lvalues or rvalues.
Comments
Post a Comment