컴파일을 하다보면 lvalue require~ 어쩌구 하는 에러를 보게된다.
무심코 넘어갈 수 있는데 lvalue에 대해서 관찰해보자.
어떤 글에서 보니 사람마다 코딩에 흔적을 남긴다고 한다.
구두점의 위치나 공백습관, 주석형태 등등 많을 것이다.
말하고자 하는 바가 프로그래밍 언어와 사람 말하는 언어습관을 비교하는 것인지 모르겠지만,
코딩을 할때 실제 말하는 것처럼, 습관적으로 하는 코딩습관이 있을 지 모른다.
문법이 확실하지 않아도, 그렇게 말해도, 또는 그렇게 코딩해도 별 문제없이 사용했을 지도 모른다.
실제 언어야 어떻게든 의미만 전달하면 되겠지만, 프로그래밍 언어는 작은 실수라도 에러기때문에
문법에 대해서 끝임없이 숙지하고 생각해야 한다 생각한다.
lvalue라는 건 좌변값이라고 말한다.
그럼 좌변값은 좌변에만 오는 값인가?
다음코드를 보면서 좌변값에 대해서 알아보자.
무엇이 틀렸는지 살펴보자.
처음에 우리가 생각한 좌변값은 우변에도 갈 수 가있다.
사실 상식적인 것이지만, 좌변값 우변값을 문법적으로 접근해보진않았다.
그럼 좌변값은 우변에도 오는 건데 왜 좌변값이라 했지? 여기서 문법적용어와 우리의 상식이 어긋나 헷갈리게된다.
영어문법중 현재완료처럼 말이다.
우리의 접근은 틀렸다.
경험적으로 좌변값, lvalue는 변수다.
반대로 좌변값이 아닌 값은 상수다.
변수의 정의는 메모리상에 데이터의 저장을 위해 할당된 메모리공간을 말한다
용어도 중요하지만, 용어라는건 어디까지나 대표하는 것이지, 모든 속성을 다 말해줄 수는 없는 것이다.
그렇기때문에 관찰이 중요하다 생각된다.
그럼 좀더 깊게 들어가보자.
여기서 대입연산자 = 의 피연산자는 좌변인가 우변인가?
대입연산자의 피연산자는 좌변이다. 대입연산자의 피연산자로는 좌변값만 올 수 있다.
다시말해 좌변값이 대입연산자의 피연산자 인 것이다.
좌변값만을 취하는 연산자들이 있다.
대입연산자와 --,++,-=,+=,& 연산자가 그렇다.
한번 에러를 만들어봤다.
이런 연산자가 좌변값이 아닌 값 다시말해 상수를 피연산자로 취하게되면 다음과 같은 에러 메세지가 나타난다.
error: lvalue required as decrement operand
error: lvalue required as increment operand
error: lvalue required as left operand of assignment
해석하자면 이런 연산자는 lvalue(좌변값) 이 필요하다는 것이다.
혹자는 lvalue의 l이 left가 아닌 locate 라고도 한다. 이것은 메모리상의 위치를 가진값(C언어적인 측면에서본)이라는 의미로 쓰면 자연스럽다. 용어야 어쨌든 중요한 건 이런 연산자는 특징은 피연산자의 내용을 바꾸기 때문에 상수가 피연산자로 올 수 없다(lvalue가 와야한다)는 것이다.