프로그래밍언어/C언어[Error]
[C언어][Error] 016. lvalue required as left operand of assignment – 좌변 값이 수정 가능한 값이 아님
about_IT
2025. 4. 24. 19:22
728x90
C언어에서 대입 연산자(=)는 왼쪽에 반드시 값을 저장할 수 있는 대상(lvalue)이 와야 합니다. 이 오류는 수정할 수 없는 값에 대입을 시도할 때 발생합니다. 예를 들어 상수, 계산식 결과, 함수 호출 결과 등은 메모리 주소를 가지지 않기 때문에 값 변경이 불가능하며, 대입 대상이 될 수 없습니다.
많은 초보자들이 연산 결과에 직접 값을 할당하려 시도하거나, 배열 전체 이름처럼 읽기 전용 식별자에 값을 대입하려다 이 오류를 경험합니다.
● 오류 예제
#include <stdio.h>
int main() {
(3 + 4) = 10; // 오류 발생: 연산 결과는 수정 불가능한 값
return 0;
}
위 코드에서 (3 + 4)는 값 7로 평가되며, 해당 표현식은 수정 가능한 공간이 아닙니다. 따라서 값을 대입할 수 없으며, 컴파일러는 다음과 같은 오류를 출력합니다.
error: lvalue required as left operand of assignment
● 해결 방법
대입 연산자의 좌변에는 반드시 메모리에 저장 가능한 공간을 가진 변수(lvalue)가 와야 합니다.
#include <stdio.h>
int main() {
int result = 3 + 4;
result = 10; // 변수는 lvalue이므로 대입 가능
printf("%d\n", result);
return 0;
}
출력 결과:
10
● 실전 팁
- 항상 대입문의 왼쪽에는 메모리에 저장된 변수와 같은 lvalue가 위치해야 합니다.
- 상수, 함수 호출 결과, 산술 연산 결과 등은 절대 좌변으로 사용할 수 없습니다.
- 포인터 dereference나 배열 원소 접근(arr[i])은 유효한 lvalue가 될 수 있습니다.
대입문의 좌변이 의미하는 바를 정확히 이해하고, 수정 가능한 메모리 공간에만 값을 저장하는 습관을 들이세요. 변수와 값의 차이를 이해하는 것은 프로그래밍의 기초 중 하나입니다.
728x90