이 오류는 함수 **스칼라형 매개변수(parameter)**에 허용되지 않는 저장 클래스(storage class)를 사용했을 때 발생합니다.
C언어에서는 스칼라형 함수 인자에는 일부 저장 클래스(auto, register 등)만 허용되며, typedef, static, extern 같은 키워드는 사용할 수 없습니다.
하지만 배열형 매개변수에서는 static을 사용할 수 있습니다(C99 이후). 이때 static은 배열이 최소한 몇 개 이상의 요소를 가져야 함을 나타냅니다.
특히 static이나 extern을 스칼라형 매개변수에 사용하려 할 때, 컴파일러는 해당 키워드가 적합하지 않다고 판단하여 오류를 출력합니다.
● 오류 예제
#include <stdio.h>
void print_value(static int x) { // 오류: static은 파라미터에 사용 불가
printf("%d\n", x);
}
컴파일 시 다음과 같은 오류가 발생합니다.
error: invalid storage class for function parameter ‘x’
● 해결 방법
함수 매개변수에는 저장 클래스 없이 선언하거나, 허용되는 키워드(register)만 사용할 수 있습니다. 아래는 수정된 예시입니다.
#include <stdio.h>
void print_value(int x) {
printf("%d\n", x);
}
int main() {
print_value(10);
return 0;
}
출력 결과:
10
● 실전 팁
- 함수 인자에는 static, extern, typedef 등의 저장 클래스를 사용할 수 없습니다.
- register는 사용 가능하지만 현대 컴파일러에서는 거의 무시되므로 생략해도 무방합니다.
- 함수 인자는 단순한 변수 선언처럼 정의하세요.
C언어에서 함수의 매개변수는 지역 변수처럼 동작하며, 저장 클래스의 사용이 엄격하게 제한됩니다. 컴파일 오류를 피하려면 함수 정의 시 저장 클래스의 사용 규칙을 명확히 이해하고 적용해야 합니다.