범위 및 표시 영역Scope and Visibility

식별자의 "표시 유형"은 "범위"를 참조할 수 있는 프로그램의 위치를 결정합니다.An identifier's "visibility" determines the portions of the program in which it can be referenced — its "scope." 식별자는 "범위"로 포함된 프로그램 부분에서만 표시되며(예: 사용 가능) 나타나는 파일, 함수, 블록 또는 함수 프로토타입으로 제한될 수 있습니다(제한이 증가하는 순서).An identifier is visible (i.e., can be used) only in portions of a program encompassed by its "scope," which may be limited (in order of increasing restrictiveness) to the file, function, block, or function prototype in which it appears. 식별자의 범위는 이름을 사용할 수 있는 프로그램의 일부입니다.The scope of an identifier is the part of the program in which the name can be used. 이를 "어휘 범위"라고도 합니다.This is sometimes called "lexical scope." 범위에는 함수, 파일, 블록 및 함수 프로토타입과 같은 네 가지 종류가 있습니다.There are four kinds of scope: function, file, block, and function prototype.

레이블을 제외한 모든 식별자에는 선언이 발생하는 수준에서 결정된 범위가 있습니다.All identifiers except labels have their scope determined by the level at which the declaration occurs. 각 범위 종류에 대한 다음 규칙은 프로그램 내의 식별자의 표시 유형을 관리합니다.The following rules for each kind of scope govern the visibility of identifiers within a program:

파일 범위File scope
파일 범위의 식별자에 대한 선언자 또는 형식 지정자는 블록 밖이나 매개 변수의 목록에 나타나고 선언 뒤의 변환 단위에 있는 어느 위치에서도 액세스할 수 있습니다.The declarator or type specifier for an identifier with file scope appears outside any block or list of parameters and is accessible from any place in the translation unit after its declaration. 파일 범위의 식별자 이름은 종종 "전역" 또는 "외부"라고 합니다.Identifier names with file scope are often called "global" or "external." 전역 식별자의 범위는 정의 또는 선언 시점부터 시작하여 변환 단위의 끝에서 종료됩니다.The scope of a global identifier begins at the point of its definition or declaration and terminates at the end of the translation unit.

함수 범위Function scope
레이블은 함수 범위가 있는 유일한 종류의 식별자입니다.A label is the only kind of identifier that has function scope. 레이블은 문에서 사용하여 암시적으로 선언됩니다.A label is declared implicitly by its use in a statement. 레이블 이름은 함수 내에서 고유해야 합니다.Label names must be unique within a function. 레이블 및 레이블 이름에 대한 자세한 내용은 goto 및 Labeled 문을 참조하세요.(For more information about labels and label names, see The goto and Labeled Statements.)

블록 범위Block scope
블록 범위를 포함하는 식별자에 대한 선언자 또는 형식 지정자는 블록 안이나 함수 정의에 있는 정식 매개 변수 선언의 목록에 나타납니다.The declarator or type specifier for an identifier with block scope appears inside a block or within the list of formal parameter declarations in a function definition. 선언 또는 정의 지점부터 해당 선언 또는 정의가 포함된 블록의 끝까지만 표시됩니다.It is visible only from the point of its declaration or definition to the end of the block containing its declaration or definition. 범위는 해당 블록 및 해당 블록에 중첩된 모든 블록으로 제한되며 연결된 블록을 닫는 중괄호에서 끝납니다.Its scope is limited to that block and to any blocks nested in that block and ends at the curly brace that closes the associated block. 이러한 식별자는 대개 "지역 변수" 라고 합니다.Such identifiers are sometimes called "local variables."

함수 프로토타입 범위Function-prototype scope
함수 프로토타입 범위를 포함하는 식별자에 대한 선언자 또는 형식 지정자는 함수 프로토타입(함수 선언의 일부가 아님)의 매개 변수 선언 목록 내에 나타납니다.The declarator or type specifier for an identifier with function-prototype scope appears within the list of parameter declarations in a function prototype (not part of the function declaration). 해당 범위는 함수 선언자 끝에서 종료됩니다.Its scope terminates at the end of the function declarator.

다른 소스 파일에서 변수를 화면에 표시하기에 적절한 선언은 저장소 클래스에서 설명합니다.The appropriate declarations for making variables visible in other source files are described in Storage Classes. 하지만 static 저장소 클래스 지정자를 사용하여 외부 수준에서 선언한 변수와 함수는 정의된 소스 파일 내에서만 표시됩니다.However, variables and functions declared at the external level with the static storage-class specifier are visible only within the source file in which they are defined. 다른 모든 함수는 전역적으로 표시됩니다.All other functions are globally visible.

참고 항목See Also

수명, 범위, 표시 유형 및 링크Lifetime, Scope, Visibility, and Linkage