선언자 개요Overview of Declarations

"선언"은 식별자 집합에 대한 해석 및 특성을 지정합니다.A "declaration" specifies the interpretation and attributes of a set of identifiers. 식별자에 의해 이름이 지정된 개체나 함수용으로 저장소를 예약하는 선언은 "정의"라고도 합니다.A declaration that also causes storage to be reserved for the object or function named by the identifier is called a "definition." 변수, 함수 및 형식에 대한 C 선언에는 다음과 같은 구문이 사용됩니다.C declarations for variables, functions, and types have this syntax:

구문Syntax

declaration:declaration:
declaration-specifiers attribute-seqoptinit-declarator-listopt;declaration-specifiers attribute-seqoptinit-declarator-listopt;

/* attribute-seqopt는 Microsoft 전용임 //* *attribute-seqopt is Microsoft specific */

declaration-specifiers:declaration-specifiers:
storage-class-specifier declaration-specifiersoptstorage-class-specifier declaration-specifiersopt

type-specifier declaration-specifiersopttype-specifier declaration-specifiersopt

type-qualifier declaration-specifiersopttype-qualifier declaration-specifiersopt

init-declarator-list:init-declarator-list:
init-declaratorinit-declarator

init-declarator-list , init-declaratorinit-declarator-list , init-declarator

init-declarator:init-declarator:
declaratordeclarator

declarator = initializerdeclarator = initializer

참고

declaration 구문은 후속 섹션에서 반복되지 않습니다.This syntax for declaration is not repeated in the following sections. 일반적으로 후속 섹션의 구문은 declarator 비단말로 시작됩니다.Syntax in the following sections usually begins with the declarator nonterminal.

init-declarator-list의 선언에는 명명 중인 식별자가 포함됩니다. init는 이니셜라이저의 약어입니다.The declarations in the init-declarator-list contain the identifiers being named; init is an abbreviation for initializer. init-declarator-list는 쉼표로 구분된 일련의 선언자로서 각 선언자에는 추가 형식 정보나 이니셜라이저 또는 이 두 가지가 모두 있을 수 있습니다.The init-declarator-list is a comma-separated sequence of declarators, each of which can have additional type information, or an initializer, or both. declarator에는 선언 중인 식별자(있는 경우)가 포함됩니다.The declarator contains the identifiers, if any, being declared. declaration-specifiers 비터미널은 일련의 형식 및 저장소 클래스 지정자로 구성됩니다. 이러한 지정자는 선언자가 나타내는 엔터티의 링크, 저장 기간 및 최소한의 형식 부분을 나타냅니다.The declaration-specifiers nonterminal consists of a sequence of type and storage-class specifiers that indicate the linkage, storage duration, and at least part of the type of the entities that the declarators denote. 따라서 선언은 저장소 클래스 지정자, 형식 지정자, 형식 한정자, 선언자 및 이니셜라이저의 조합으로 구성됩니다.Therefore, declarations are made up of some combination of storage-class specifiers, type specifiers, type qualifiers, declarators, and initializers.

선언에는 attribute-seq에 나열된 선택적 특성이 하나 이상 포함될 수 있습니다. seq는 시퀀스의 약어입니다.Declarations can contain one or more of the optional attributes listed in attribute-seq; seq is an abbreviation for sequence. 이러한 Microsoft 전용 특성은 이 설명서 전반에 설명되어 있는 다양한 기능을 수행합니다.These Microsoft-specific attributes perform a variety of functions, which are discussed in detail throughout this book.

변수 선언에 대한 일반적인 양식에서 type-specifier는 변수의 데이터 형식을 제공합니다.In the general form of a variable declaration, type-specifier gives the data type of the variable. type-specifier는 형식이 const 또는 volatile에 의해 수정될 때처럼 복합형이 될 수 있습니다.The type-specifier can be a compound, as when the type is modified by const or volatile. declarator는 변수 이름을 제공합니다. 이러한 변수 이름은 배열이나 포인터 형식을 선언하기 위해 수정할 수 있습니다.The declarator gives the name of the variable, possibly modified to declare an array or a pointer type. 예를 들면 다음과 같습니다.For example,

int const *fp;  

이 예제는 fp라는 이름의 변수를 수정할 수 없는 (const) int 값에 대한 포인터로 선언합니다.declares a variable named fp as a pointer to a nonmodifiable (const) int value. 쉼표로 구분된 여러 선언자를 사용하여 한 선언에서 둘 이상의 변수를 정의할 수 있습니다.You can define more than one variable in a declaration by using multiple declarators, separated by commas.

선언에 선언자가 하나 이상 있거나 형식 지정자가 구조체 태그, 공용 구조체 태그 또는 열거형의 멤버를 선언해야 합니다.A declaration must have at least one declarator, or its type specifier must declare a structure tag, union tag, or members of an enumeration. 선언자는 식별자에 대한 나머지 정보를 제공합니다.Declarators provide any remaining information about an identifier. 선언자는 대괄호([ ]), 별표(\) 또는 괄호( **( )* )로 수정하여 배열, 포인터 또는 함수 형식을 각각 선언할 수 있는 식별자입니다.A declarator is an identifier that can be modified with brackets ([ ]), asterisks (\), or parentheses ( **( )* ) to declare an array, pointer, or function type, respectively. 단순 변수(문자, 정수 및 부동 소수점 항목) 또는 단순 변수의 구조체 및 공용 구조체를 선언할 때 declarator는 식별자로만 사용됩니다.When you declare simple variables (such as character, integer, and floating-point items), or structures and unions of simple variables, the declarator is just an identifier. 선언자에 대한 자세한 내용은 선언자 및 변수 선언을 참조하세요.For more information on declarators, see Declarators and Variable Declarations.

모든 정의는 암시적으로 선언이지만 모든 선언이 정의인 것은 아닙니다.All definitions are implicitly declarations, but not all declarations are definitions. 예를 들어 extern 저장소 클래스 지정자로 시작되는 변수 선언은 "정의" 선언이라기 보다는 "참조" 선언입니다.For example, variable declarations that begin with the extern storage-class specifier are "referencing," rather than "defining" declarations. 외부 변수가 정의 전에 참조되거나 사용된 소스 파일과 다른 소스 파일에 정의된 경우 extern 선언이 필요합니다.If an external variable is to be referred to before it is defined, or if it is defined in another source file from the one where it is used, an extern declaration is necessary. 저장소는 "참조" 선언에 의해 할당되지 않으며 선언에서 변수를 초기화할 수도 없습니다.Storage is not allocated by "referencing" declarations, nor can variables be initialized in declarations.

저장소 클래스 또는 형식(또는 둘 다)은 변수 선언에 필요합니다.A storage class or a type (or both) is required in variable declarations. __declspec을 제외하고, 선언에는 하나의 저장소 클래스 지정자만 허용되며 각 컨텍스트에서는 일부 저장소 클래스 지정자만 허용됩니다.Except for __declspec, only one storage-class specifier is allowed in a declaration and not all storage-class specifiers are permitted in every context. __declspec 저장소 클래스는 다른 저장소 클래스 지정자에 사용할 수 있으며 두 번 이상 허용됩니다.The __declspec storage class is allowed with other storage-class specifiers, and it is allowed more than once. 선언의 저장소 클래스 지정자는 선언된 항목이 저장 및 초기화되는 방법과 프로그램에서 해당 항목을 참조할 수 있는 부분에 영향을 줍니다.The storage-class specifier of a declaration affects how the declared item is stored and initialized, and which parts of a program can reference the item.

C로 정의된 storage-class-specifier 터미널에는 auto, extern, register, statictypedef가 포함됩니다.The storage-class-specifier terminals defined in C include auto, extern, register, static, and typedef. 또한 Microsoft C에는 storage-class-specifier 터미널 __declspec이 포함됩니다.In addition, Microsoft C includes the storage-class-specifier terminal __declspec. typedef__declspec을 제외한 모든 storage-class-specifier 터미널에 대해서는 저장소 클래스에 설명되어 있습니다.All storage-class-specifier terminals except typedef and __declspec are discussed in Storage Classes. typedef에 대한 내용은 Typedef 선언을 참조하세요.See Typedef Declarations for information about typedef. __declspec에 대한 내용은 확장된 저장소 클래스 특성을 참조하세요.See Extended Storage-Class Attributes for information about __declspec.

소스 프로그램 내 선언의 위치 및 기타 변수 선언의 유무는 변수 수명을 결정하는 중요한 요소입니다.The location of the declaration within the source program and the presence or absence of other declarations of the variable are important factors in determining the lifetime of variables. 재선언은 여러 개 있을 수 있지만 정의는 하나만 있어야 합니다.There can be multiple redeclarations but only one definition. 하지만 정의는 둘 이상의 변환 단위에 있을 수 있습니다.However, a definition can appear in more than one translation unit. 내부 링크가 있는 개체의 경우에는 내부적으로 연결된 개체가 변환 단위별로 고유하므로 이 규칙이 각 변환 단위에 따로 적용됩니다.For objects with internal linkage, this rule applies separately to each translation unit, because internally linked objects are unique to a translation unit. 외부 링크가 있는 개체의 경우 이 규칙은 전체 프로그램에 적용됩니다.For objects with external linkage, this rule applies to the entire program. 표시 유형에 대한 자세한 내용은 수명, 범위, 표시 유형 및 링크를 참조하세요.See Lifetime, Scope, Visibility, and Linkage for more information about visibility.

형식 지정자는 식별자의 데이터 형식에 대한 일부 정보를 제공합니다.Type specifiers provide some information about the data types of identifiers. 기본 형식 지정자는 int입니다.The default type specifier is int. 자세한 내용은 형식 지정자를 참조하세요.For more information, see Type Specifiers. 형식 지정자는 형식 태그, 구조체 및 공용 구조체 구성 요소 이름 및 열거형 상수도 정의합니다.Type specifiers can also define type tags, structure and union component names, and enumeration constants. 자세한 내용은 열거형 선언, 구조체 선언공용 구조체 선언을 참조하세요.For more information see Enumeration Declarations, Structure Declarations, and Union Declarations.

type-qualifier 터미널에는 constvolatile이라는 두 가지가 있습니다.There are two type-qualifier terminals: const and volatile. 이러한 한정자는 l-value를 통해 해당 형식의 개체에 액세스하는 경우에만 관련된 형식의 추가 속성을 지정합니다.These qualifiers specify additional properties of types that are relevant only when accessing objects of that type through l-values. constvolatile에 대한 자세한 내용은 형식 한정자를 참조하세요.For more information on const and volatile, see Type Qualifiers. l-value 정의에 대한 내용은 L-Value 및 R-Value 식을 참조하세요.For a definition of l-values, see L-Value and R-Value Expressions.

참고 항목See Also

C 언어 구문 요약 C Language Syntax Summary
선언 및 형식 Declarations and Types
선언 요약Summary of Declarations