다음을 통해 공유


범위

프로그램의 특정 영역에서만 C++를 사용할 수 있습니다. 이 영역을 이름의 "범위"라고 합니다. 범위는 정적 범위의 개체가 표시되지 않는 이름의 "수명"을 결정합니다. 클래스 생성자와 소멸자가 호출되고 범위에 로컬인 변수가 초기화되면 범위가 이름의 표시 유형을 결정하기도 합니다. 자세한 내용은 생성자소멸자를 참조하십시오. 범위의 종류는 다음 5가지입니다.

  • **로컬 범위   **블록 안에서 선언된 이름은 선언 시점 이후 해당 블록과 거기에 포함된 블록 안에서만 액세스할 수 있습니다. 함수 본문 바깥쪽 범위 안에서 선언된 것처럼 가장 바깥쪽 함수 블록의 범위에서 함수의 정식 인수 이름에 로컬 범위가 포함됩니다. 다음과 같은 코드 조각을 생각해 봅시다.

    {
        int i;
    }
    

    i가 중괄호 안의 블록에 선언되었으므로 i에 로컬 범위가 있으며 액세스할 수 없습니다. 중괄호를 닫기 전에는 코드가 액세스할 수 없기 때문입니다.

  • **함수 범위   **레이블은 함수 범위를 갖는 유일한 이름입니다. 함수 안의 어디에나 사용할 수 있지만 해당 함수 밖에서 액세스할 수는 없습니다.

  • **파일 범위   **모든 블록이나 클래스 밖에서 선언된 이름에는 파일 범위가 있습니다. 선언 후에는 변환 단위 어디에서나 액세스할 수 있습니다 파일 범위가 정적 개체를 선언하지 않는 이름을 전역 이름이라고 합니다.

    C++에서는 파일 범위를 네임스페이스 범위라고도 합니다.

  • 클래스 범위   클래스 멤버 이름에는 클래스 범위가 있습니다. 클래스의 개체나 개체에 대한 포인터에 멤버 선택 연산자(. 또는 –>)나 멤버 포인터 연산자(.* 또는 –>*)를 사용해야 클래스 멤버 함수에 액세스할 수 있습니다. 비정적 클래스 멤버 데이터는 해당 클래스의 개체에 대해 로컬로 간주됩니다. 다음과 같은 클래스 선언을 생각해 보십시오.

    class Point
    {
        int x;
        int y;
    };
    

    클래스 멤버 x 및 y는 Point 클래스의 범위에 있다고 간주됩니다.

  • **프로토타입 범위   **함수 프로토타입에 선언된 이름은 프로토타입 끝까지만 표시됩니다. 다음 프로토타입은 이름 3개(strDestination, numberOfElements 및 strSource)를 선언하며 이 이름은 프로토타입 끝에서 범위를 벗어납니다.

    errno_t strcpy_s( char *strDestination, size_t numberOfElements, const char *strSource );
    

참고 항목

참조

기본 개념