Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C 언어 문장 블록(Statement Block)의 범위 규칙 완벽 정리

C 언어에서 범위 규칙(Scope Rules)은 변수를 올바르게 사용하기 위해 반드시 이해해야 하는 핵심 개념입니다. 범위 규칙은 다음 세 가지 요소와 밀접한 관련이 있습니다.

  • 변수에 대한 접근 가능 여부
  • 변수가 존재하는 기간(생명 주기)
  • 변수를 사용할 수 있는 경계(사용 범위)

문장 블록과 관련된 범위 규칙

문장 블록(statement block)과 관련된 범위 규칙은 다음과 같습니다.

  • 블록(block)은 중괄호 { }로 묶인 일련의 문장들로 구성됩니다.
  • 블록 내에서 선언된 변수는 해당 블록 안에서만 접근하고 사용할 수 있으며, 블록 외부에서는 존재하지 않는 것으로 간주됩니다.

아래 예제들을 통해 문장 블록의 범위 규칙을 자세히 살펴보겠습니다.

예제 1: 서로 다른 블록에서 변수 선언

다음은 두 개의 독립적인 블록에서 각각 변수를 선언하고 사용하는 C 프로그램입니다.

#include<stdio.h>
main ( ){
    {
        int i = 1;
        printf ("%d",i);
    }
    {
        int j = 2;
        printf("%d",j);
    }
}

실행 결과

1 2

두 블록은 서로 독립적이므로 각 블록 내부에서 선언된 변수는 자신이 속한 블록 안에서만 유효합니다.

예제 2: 같은 이름의 변수를 서로 다른 블록에서 선언

서로 다른 블록에서 같은 이름의 변수를 선언하더라도, 컴파일러는 이들을 전혀 다른 변수로 취급합니다.

#include<stdio.h>
main ( ){
    {
        int i = 1;
        printf ("%d",i);
    }
    {
        int i = 2;
        printf ("%d",i);
    }
}

실행 결과

1 2

비록 두 블록에서 모두 같은 이름의 변수 i를 선언했지만, 각각 별개의 메모리 공간을 가지는 독립적인 변수이기 때문에 오류 없이 정상적으로 실행됩니다.

예제 3: 중첩 블록에서의 변수 가림(Shadowing)

내부 블록에서 외부 블록과 같은 이름의 변수를 선언하면, 내부 블록이 실행되는 동안 외부 블록의 변수는 가려지게(masking) 됩니다.

#include<stdio.h>
main ( ){
    int i = 1; {
        int i = 2;
        printf ("%d",i);
    }
}

실행 결과

2

외부 블록의 i는 값이 1이지만, 내부 블록에서 같은 이름의 i가 새로 선언되었기 때문에 printf 함수는 내부 블록의 값인 2를 출력합니다. 이처럼 내부 블록의 변수 선언이 외부 블록의 동일한 이름을 가진 변수를 일시적으로 가리는 현상을 변수 가림(variable shadowing)이라고 합니다.

예제 4: 내부 블록에서 외부 변수 접근

내부 블록에 동일한 이름의 변수가 선언되어 있지 않다면, 중첩된 내부 블록에서도 외부 블록에서 선언된 변수에 접근할 수 있습니다.

#include<stdio.h>
main ( ){
    int i = 1; {
        int j = 2;
        printf ("%d",j);
        printf ("%d",i);
    }
}

실행 결과

2 1

내부 블록에는 변수 j만 선언되어 있고 i는 선언되어 있지 않으므로, 내부 블록에서도 외부 블록의 변수 i(값 1)에 접근하여 출력할 수 있습니다.

정리

C 언어의 문장 블록 범위 규칙을 요약하면 다음과 같습니다.

  • 블록 내에서 선언된 변수는 해당 블록 내부에서만 유효합니다.
  • 서로 다른 블록에서 같은 이름의 변수를 선언하면 서로 다른 변수로 취급됩니다.
  • 중첩 블록에서 같은 이름의 변수를 재선언하면, 내부 블록 실행 중에는 외부 변수가 가려집니다.
  • 내부 블록에 같은 이름의 변수가 없다면 외부 블록의 변수에 자유롭게 접근할 수 있습니다.