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

[C언어][Error] 007. redefinition or redeclaration of variable/parameter/struct member – 변수나 파라미터를 중복 선언했을 때

about_IT 2025. 4. 22. 23:27

이 오류는 같은 이름의 변수, 함수 매개변수, 구조체 멤버 등을 동일한 범위(scope) 내에서 중복 선언하거나 정의했을 때 발생합니다. C언어는 동일한 이름의 식별자를 같은 블록 안에서 두 번 이상 선언하는 것을 허용하지 않습니다.


변수를 실수로 두 번 선언하거나, 구조체 안에서 같은 이름의 멤버를 중복 선언할 경우 컴파일러는 '재정의(redefinition)' 또는 '재선언(redeclaration)' 오류를 발생시킵니다.


다음은 오류가 발생하는 예시입니다.

#include <stdio.h>

int main() {
    int a = 10;
    int a = 20;  // 동일한 변수 이름을 다시 선언
    printf("%d\n", a);
    return 0;
}

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

error: redefinition of ‘a’

아래는 중복 선언을 제거하여 수정한 코드입니다.

#include <stdio.h>

int main() {
    int a = 10;
    a = 20;  // 값만 변경
    printf("%d\n", a);
    return 0;
}

출력 결과는 다음과 같습니다.

20

● 실전 팁

  • 같은 이름의 변수를 같은 블록 안에서 두 번 선언하지 마세요.
  • 구조체를 설계할 때는 멤버 이름이 중복되지 않도록 주의하세요.
  • 헤더 파일을 여러 파일에서 include할 때는 include guard 또는 #pragma once를 사용해 중복 선언을 방지하세요.

재선언 오류는 실수로 선언부를 반복했을 때 자주 발생하므로, 변수 선언 시 선언 위치와 유효 범위를 항상 명확히 인지하고 있어야 합니다.