__declspec

Microsoft 전용Microsoft Specific

저장소 클래스 정보를 지정 하기 위한 확장 특성 구문은 __declspec 키워드를 사용 합니다 .이 키워드는 지정 된 형식의 인스턴스가 아래 나열 된 Microsoft 전용 저장소 클래스 특성과 함께 저장 되도록 지정 합니다.The extended attribute syntax for specifying storage-class information uses the __declspec keyword, which specifies that an instance of a given type is to be stored with a Microsoft-specific storage-class attribute listed below. 다른 저장소 클래스 한정자의 예로는 및 키워드를 들 수가 static extern 있습니다.Examples of other storage-class modifiers include the static and extern keywords. 그러나 이 키워드는 C 및 C++ 언어의 ANSI 사양에 포함되므로 확장 특성 구문에는 사용되지 않습니다.However, these keywords are part of the ANSI specification of the C and C++ languages, and as such are not covered by extended attribute syntax. 확장명 특성 구문은 C 및 C++ 언어에 대한 Microsoft 전용 확장을 간소화하고 표준화합니다.The extended attribute syntax simplifies and standardizes Microsoft-specific extensions to the C and C++ languages.

문법Grammar

decl-specifier:decl-specifier:
__declspec ( extended-decl-modifier-seq )__declspec ( extended-decl-modifier-seq )

extended-decl-modifier-seq:extended-decl-modifier-seq:
extended-decl-modifier opt extended-decl-modifieropt
extended-decl-modifier extended-decl-modifier-seqextended-decl-modifier extended-decl-modifier-seq

extended-decl-modifier:extended-decl-modifier:
align(number)align( number )
allocate("segname")allocate(" segname ")
allocator
appdomain
code_seg("segname")code_seg(" segname ")
deprecated
dllimport
dllexport
jitintrinsic
naked
noalias
noinline
noreturn
nothrow
novtable
no_sanitize_address
process
property({ get= get-func-name |- ,put= func-name })property( { get=get-func-name | ,put=put-func-name } )
restrict
safebuffers
selectany
spectre(nomitigation)
thread
uuid("Comobjectguid")uuid(" ComObjectGUID ")

공백은 선언 한정자 시퀀스를 구분합니다.White space separates the declaration modifier sequence. 뒤에 나오는 단원에 예제가 있습니다.Examples appear in later sections.

확장 특성 문법을 지 원하는 Microsoft 전용 저장소 클래스 특성은,,,,,,,,,,,, align allocate allocator appdomain code_seg deprecated dllexport dllimport jitintrinsic naked noalias noinline noreturn nothrow novtable no_sanitize_address process restrict safebuffers selectany spectre threadExtended attribute grammar supports these Microsoft-specific storage-class attributes: align, allocate, allocator, appdomain, code_seg, deprecated, dllexport, dllimport, jitintrinsic, naked, noalias, noinline, noreturn, nothrow, novtable, no_sanitize_address,process, restrict, safebuffers, selectany, spectre, and thread. 또한 다음과 같은 COM 개체 특성도 지원 합니다. property uuidIt also supports these COM-object attributes: property and uuid.

,,,,,,,,,, code_seg dllexport dllimport naked noalias nothrow no_sanitize_address property restrict selectany threaduuid 저장소 클래스 특성은 해당 특성이 적용 되는 개체 또는 함수의 선언에만 해당 되는 속성입니다.The code_seg, dllexport, dllimport, naked, noalias, nothrow, no_sanitize_address, property, restrict, selectany, thread, and uuid storage-class attributes are properties only of the declaration of the object or function to which they are applied. thread 특성은 데이터 및 개체에만 영향을 줍니다.The thread attribute affects data and objects only. nakedspectre 특성은 함수에만 영향을 줍니다.The naked and spectre attributes affect functions only. dllimportdllexport 특성은 함수, 데이터 및 개체에 영향을 줍니다.The dllimport and dllexport attributes affect functions, data, and objects. property, selectany 및 특성은 uuid COM 개체에 영향을 줍니다.The property, selectany, and uuid attributes affect COM objects.

이전 버전과의 호환성을 위해 _declspec__declspec 컴파일러 옵션 /Za ( 사용 안 함 언어 확장 을 지정 하지 않는 경우의 동의어입니다.For compatibility with previous versions, _declspec is a synonym for __declspec unless compiler option /Za (Disable language extensions) is specified.

__declspec 키워드는 간단한 선언의 시작 부분에 배치 해야 합니다.The __declspec keywords should be placed at the beginning of a simple declaration. 컴파일러는 __declspec * 또는 & 뒤에 배치 된 키워드와 선언에서 변수 식별자 앞에 있는 모든 키워드를 무시 합니다.The compiler ignores, without warning, any __declspec keywords placed after * or & and in front of the variable identifier in a declaration.

__declspec 사용자 정의 형식 선언의 시작 부분에 지정 된 특성은 해당 형식의 변수에 적용 됩니다.A __declspec attribute specified in the beginning of a user-defined type declaration applies to the variable of that type. 다음은 그 예입니다.For example:

__declspec(dllimport) class X {} varX;

이 경우 특성이 varX에 적용됩니다.In this case, the attribute applies to varX. __declspec 또는 키워드 뒤에 배치 되는 특성은 class struct 사용자 정의 형식에 적용 됩니다.A __declspec attribute placed after the class or struct keyword applies to the user-defined type. 다음은 그 예입니다.For example:

class __declspec(dllimport) X {};

이 경우 특성이 X에 적용됩니다.In this case, the attribute applies to X.

단순 선언에 특성을 사용 하는 일반적인 지침은 다음과 같습니다 __declspec .The general guideline for using the __declspec attribute for simple declarations is as follows:

decl-지정자-시퀀스 init-선언 목록decl-specifier-seq init-declarator-list;

Decl 지정자-시퀀스 는 기타 항목 (예:,, int float typedef 또는 클래스 이름), 저장소 클래스 (예:, static extern ) 또는 __declspec 확장을 포함 해야 합니다.The decl-specifier-seq should contain, among other things, a base type (e.g. int, float, a typedef, or a class name), a storage class (e.g. static, extern), or the __declspec extension. Init 선언 자 목록 에는 선언의 포인터 부분을 포함 해야 합니다.The init-declarator-list should contain, among other things, the pointer part of declarations. 다음은 그 예입니다.For example:

__declspec(selectany) int * pi1 = 0;   //Recommended, selectany & int both part of decl-specifier
int __declspec(selectany) * pi2 = 0;   //OK, selectany & int both part of decl-specifier
int * __declspec(selectany) pi3 = 0;   //ERROR, selectany is not part of a declarator

다음 코드는 정수 스레드 지역 변수를 선언하고 값을 사용하여 초기화합니다.The following code declares an integer thread local variable and initializes it with a value:

// Example of the __declspec keyword
__declspec( thread ) int tls_i = 1;

Microsoft 전용 종료END Microsoft Specific

참조See also

Keywords
C 확장 스토리지 클래스 특성C Extended Storage-Class Attributes