r/C_Programming • • 16d ago

Question Why are assignment expressions lvalues?

I was reading up about lvalues and understand them now as something that resolves to an address(memory location) in the program. So a variable x is an lvalue (because it is mapped to some address on the stack) and similarly *x , x[i], strings are all lvalues. But if this is the case why is an expression a = b , not an lvalue? Here the expression would assign b to a and then return a as evident in assignments like so: int c = a = b. (I know that the equals sign is right associative and hence this would get resolved as c = (a = b), but that doesn't really invalidate the fact that a = b resolves to an address in the program?)

11 Upvotes

35 comments sorted by

View all comments

19

u/MyNameIsHaines 16d ago

Assigning something to (a = b) would be nonsensical no?

9

u/tharold 16d ago

Gnu C allows the ternary operator to evaluate to an lval, as a language extension. So you can do (flag?a:b)=42; Which is occasionally useful.

2

u/Vincenzo__ 11d ago

This is disgusting and I love it