범위
프로그램의 특정 영역에서만 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 );