프로그래밍언어/C언어[Error]

[C언어][Error] 087. expression must be a modifiable lvalue – 수정 불가능한 값에 대입 시도

about_IT 2025. 5. 2. 20:51
728x90

이 오류는 대입문의 좌변에 수정이 불가능한 표현식이 사용되었을 때 발생합니다. C언어에서 대입 연산자는 좌변이 수정 가능한 lvalue여야 하는데, 상수, 배열 이름, 함수 반환값 등은 수정할 수 없으므로 이러한 값에 값을 할당하려 하면 오류가 발생합니다.


특히 배열 이름은 포인터처럼 보이지만 실제로는 수정 불가능한 주소를 나타내므로 좌변에 쓸 수 없습니다. 함수의 반환값 또한 일시적인 값으로 간주되므로 lvalue가 될 수 없습니다.



● 오류 예제

#include <stdio.h>

int main() {
    5 = 10;  // 오류: 상수는 수정 불가
    return 0;
}

또는 다음 예시처럼 함수 반환값에 값을 대입해도 동일한 오류가 발생합니다.

int getValue() {
    return 3;
}

int main() {
    getValue() = 5;  // 오류: 반환값은 수정할 수 없음
    return 0;
}

컴파일 시 다음과 같은 오류 메시지가 출력됩니다.

error: expression must be a modifiable lvalue


● 해결 방법

수정하려는 대상이 반드시 변수 또는 수정 가능한 메모리 공간이어야 합니다. 상수나 반환값이 아닌 변수에 대입해야 합니다.

int main() {
    int x = 5;
    x = 10;  // 정상적인 대입
    return 0;
}

출력 결과:

(출력은 없음, 오류 없음)


● 실전 팁

  • 좌변은 반드시 수정 가능한 변수여야 합니다.
  • 상수, 배열 이름, 함수 반환값, 포인터 연산 결과 등을 좌변에 쓰지 않도록 주의하세요.
  • 컴파일러가 "modifiable lvalue" 오류를 출력하면 좌변이 변수인지 다시 확인하세요.

C언어에서는 대입 연산의 기본 원칙을 이해하고, 좌변에 반드시 수정 가능한 변수를 사용하는 습관을 들이는 것이 중요합니다.

728x90