이 오류는 숫자 리터럴에 C언어에서 허용되지 않는 접미사(suffix)를 붙였을 때 발생합니다. C언어는 정수 리터럴과 실수 리터럴에 사용할 수 있는 접미사를 엄격하게 제한하며, 잘못된 문자가 붙으면 문법 오류로 처리됩니다.
예를 들어, 100z 와 같은 표현은 z가 유효한 접미사가 아니기 때문에 이 오류가 발생합니다. 정수 리터럴에는 u, l, ul 등의 조합만 사용할 수 있으며, 대문자와 소문자도 구분됩니다.
● 오류 예제
#include <stdio.h>
int main() {
int x = 100z; // 오류: 잘못된 접미사 z
printf("%d\n", x);
return 0;
}
컴파일러는 다음과 같은 오류 메시지를 출력합니다.
error: invalid suffix "z" on integer constant
● 해결 방법
리터럴에 사용할 수 있는 정식 접미사만 사용해야 합니다. C언어에서 허용되는 주요 접미사는 다음과 같습니다.
- u 또는 U : unsigned 정수
- l 또는 L : long 정수
- ul , UL, llu, ULL 등
#include <stdio.h>
int main() {
unsigned int x = 100u; // 올바른 접미사 사용
printf("%u\n", x);
return 0;
}
출력 결과:
100
● 실전 팁
- 숫자 리터럴에 임의의 문자나 단위를 붙이지 마세요. (예: m, z, w 등)
- 정수형에 u, l, ul 등을 붙일 때는 순서와 대소문자 규칙도 정확히 지켜야 합니다.
- 리터럴의 타입을 변경하려면 캐스팅 연산을 사용하는 것도 좋은 방법입니다.
숫자 리터럴의 접미사는 컴파일러가 타입을 판단하는 데 중요한 역할을 하므로, 정확한 표기법을 숙지하고 사용하는 것이 중요합니다. 임의의 문자를 붙이는 실수는 피하도록 합시다.