728x90
이 오류는 동일한 이름의 변수가 먼저 non-static으로 선언되었는데, 이후 다시 static으로 선언될 경우 발생합니다. C언어에서는 변수의 저장 클래스(static, extern 등)를 바꿔서 다시 선언하는 것을 허용하지 않으며, 같은 식별자는 한 번만 정의되어야 합니다.
이 오류는 보통 헤더 파일이나 여러 파일에서 동일한 변수명을 중복 선언하면서 발생합니다.
● 오류 예제
// 파일1.c
int counter;
// 파일2.c
static int counter; // 오류: static으로 재선언
컴파일 시 다음과 같은 오류 메시지가 출력됩니다.
error: static declaration of ‘counter’ follows non-static declaration
● 해결 방법
하나의 변수는 하나의 저장 클래스만을 가져야 하며, static과 non-static 선언이 충돌하지 않도록 파일 간 선언을 정리해야 합니다. 필요 시 extern 키워드를 사용해 외부 참조하도록 변경할 수 있습니다.
// 공통 헤더파일 common.h
extern int counter;
// 파일1.c
#include "common.h"
int counter;
// 파일2.c
#include "common.h"
void func() {
counter++;
}
● 실전 팁
- 같은 이름의 변수에 대해 static과 non-static을 혼용하면 오류가 발생합니다.
- 공유할 변수는 extern 키워드와 함께 헤더 파일로 선언하고, 한 파일에서만 정의하세요.
- 정적(static) 변수는 정의된 파일 내부에서만 사용 가능하다는 점을 명확히 구분하세요.
C언어에서 변수의 저장 클래스는 코드의 접근 범위와 생존 기간을 결정하므로, 파일 간 변수 공유 시에는 선언 방식의 일관성과 범위를 반드시 점검하는 습관이 필요합니다.
728x90