네임스페이스Name Spaces

컴파일러가 "네임스페이스"를 설정하여 여러 종류의 항목에 사용된 식별자를 구별합니다.The compiler sets up "name spaces" to distinguish between the identifiers used for different kinds of items. 각 네임스페이스에 있는 이름이 고유해야 충돌을 피할 수 있지만 네임스페이스 안에 같은 이름이 두 번 이상 나타날 수도 있습니다.The names within each name space must be unique to avoid conflict, but an identical name can appear in more than one name space. 즉, 항목이 서로 다른 네임스페이스에 있을 경우 2개 이상의 다른 항목에 같은 식별자를 사용할 수 있습니다.This means that you can use the same identifier for two or more different items, provided that the items are in different name spaces. 컴파일러는 프로그램에서 식별자의 구문 컨텍스트를 기반으로 참조를 확인할 수 있습니다.The compiler can resolve references based on the syntactic context of the identifier in the program.

참고

네임스페이스의 제한된 C 개념과 C++ "네임 스페이스" 기능을 혼동하지 마십시오.Do not confuse the limited C notion of a name space with the C++ "namespace" feature. 자세한 내용은 C++ 언어 참조네임스페이스를 참조하세요.See Namespaces in the C++ Language Reference for more information.

이 목록에서는 C에 사용되는 네임스페이스를 설명합니다.This list describes the name spaces used in C.

문 레이블Statement labels
명명된 문 레이블은 문의 일부입니다.Named statement labels are part of statements. 문 레이블의 정의는 항상 콜론 앞에 오지만 case 레이블의 일부분이 아닙니다.Definitions of statement labels are always followed by a colon but are not part of case labels. 항상 goto 키워드 뒤에 문 레이블을 사용합니다.Uses of statement labels always immediately follow the keyword goto. 문 레이블은 다른 이름이나 다른 함수의 레이블 이름과 다르지 않아도 됩니다.Statement labels do not have to be distinct from other names or from label names in other functions.

구조체, 공용 구조체 및 열거형 태그Structure, union, and enumeration tags
이 태그는 구조체, 공용 구조체 및 열거형 형식 지정자의 일부이며, 사용될 경우 예약된 단어 struct, union 또는 enum 바로 뒤에 옵니다.These tags are part of structure, union, and enumeration type specifiers and, if present, always immediately follow the reserved words struct, union, or enum. 태그 이름은 같은 표시 유형을 가진 다른 모든 구조체, 열거형 또는 공용 구조체 태그와 구별되어야 합니다.The tag names must be distinct from all other structure, enumeration, or union tags with the same visibility.

구조체 또는 공용 구조체의 멤버Members of structures or unions
멤버 이름은 각각의 구조체 및 공용 구조체 형식과 연결된 네임스페이스에 할당됩니다.Member names are allocated in name spaces associated with each structure and union type. 즉, 같은 식별자가 여러 구조체나 공용 구조체에서 동시에 구성 요소 이름이 될 수 있습니다.That is, the same identifier can be a component name in any number of structures or unions at the same time. 구성 요소 이름의 정의는 항상 구조체 또는 공용 구조체 형식 지정자 안에 발생합니다.Definitions of component names always occur within structure or union type specifiers. 구성 요소 이름은 항상 멤버 선택 연산자(->.) 바로 뒤에 사용됩니다.Uses of component names always immediately follow the member-selection operators (-> and .). 멤버 이름은 구조체나 공용 구조체에서 고유해야 하지만 다른 구조체 및 공용 구조체 멤버의 이름이나 구조체 자체의 이름을 포함하여 프로그램에 있는 다른 이름과 구별될 필요는 없습니다.The name of a member must be unique within the structure or union, but it does not have to be distinct from other names in the program, including the names of members of different structures and unions, or the name of the structure itself.

일반 식별자Ordinary identifiers
다른 모든 이름은 변수, 함수(정식 매개 변수 및 지역 변수 포함) 및 열거형 상수가 포함된 네임스페이스에 속합니다.All other names fall into a name space that includes variables, functions (including formal parameters and local variables), and enumeration constants. 식별자 이름에 중첩된 표시 유형이 있으므로 블록 안에서 다시 정의할 수 있습니다.Identifier names have nested visibility, so you can redefine them within blocks.

Typedef 이름Typedef names
같은 범위에서 Typedef 이름을 식별자로 사용할 수 없습니다.Typedef names cannot be used as identifiers in the same scope.

예를 들어, 구조체 태그, 구조체 멤버 및 변수 이름이 3개의 다른 네임스페이스에 있으므로 이 예제에서 이름이 student인 항목 3개가 서로 충돌하지 않습니다.For example, since structure tags, structure members, and variable names are in three different name spaces, the three items named student in this example do not conflict. 각 항목의 컨텍스트에서 프로그램에 나오는 각각의 student를 정확하게 해석할 수 있습니다.The context of each item allows correct interpretation of each occurrence of student in the program. 구조체에 대한 자세한 내용은 구조체 선언을 참조하세요.(For information about structures, see Structure Declarations.)

struct student {  
   char student[20];  
   int class;  
   int id;  
   } student;  

studentstruct 키워드 다음에 나타나면 컴파일러에서 구조체 태그로 인식합니다.When student appears after the struct keyword, the compiler recognizes it as a structure tag. student가 멤버 선택 연산자(-> 또는 .) 뒤에 나타나면 이름이 구조체 멤버를 참조합니다.When student appears after a member-selection operator (-> or .), the name refers to the structure member. 다른 컨텍스트에서는 student가 구조체 변수를 참조합니다.In other contexts, student refers to the structure variable. 그러나 의미가 불분명해질 수 있으므로 태그 네임스페이스를 오버로드하지 않는 것이 좋습니다.However, overloading the tag name space is not recommended since it obscures meaning.

참고 항목See Also

프로그램 구조Program Structure