프로그래밍언어/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