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