__declspec

Microsoft 전용

스토리지 클래스 정보를 지정하기 위한 확장 특성 구문은 지정된 형식의 인스턴스를 아래에 나열된 Microsoft 특정 스토리지 클래스 특성과 함께 저장하도록 지정하는 키워드를 사용합니다 __declspec . 다른 스토리지 클래스 한정자의 예로는 staticextern 키워드가 있습니다. 그러나 이러한 키워드는 C 및 C++ 언어의 ANSI 사양의 일부이므로 확장 특성 구문에서 다루지 않습니다. 확장명 특성 구문은 C 및 C++ 언어에 대한 Microsoft 전용 확장을 간소화하고 표준화합니다.

문법

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

extended-decl-modifier-seq:
extended-decl-modifieropt
extended-decl-modifier extended-decl-modifier-seq

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

공백은 선언 한정자 시퀀스를 구분합니다. 뒤에 나오는 단원에 예제가 있습니다.

확장 특성 문법은 다음 Microsoft 관련 스토리지 클래스 특성align인 , , allocate, allocator, appdomain, code_seg, deprecated, dllexport, selectanynoinlinenoaliasnoreturnnakednothrowjitintrinsicnovtableno_sanitize_addressempty_basesdllimportrestrictsafebuffersprocessspectre및 .thread 또한 다음과 같은 COM 개체 특성 propertyuuid.

code_seg, dllexport, dllimport, empty_bases,naked, noalias, , nothrow, no_sanitize_address, property, , restrict, selectany, threaduuid 스토리지 클래스 특성은 적용되는 개체 또는 함수 선언의 속성입니다. 이 특성은 thread 데이터 및 개체에만 영향을 줍니다. 및 spectre 특성은 naked 함수에만 영향을 줍니다. 및 dllexport 특성은 dllimport 함수, 데이터 및 개체에 영향을 줍니다. 및 selectanyuuid 특성은 propertyCOM 개체에 영향을 미칩니다.

이전 버전 _declspec 과의 호환성을 위해 __declspec 컴파일러 옵션 /Za (언어 확장 사용 안 함) 을 지정하지 않는 한 동의어입니다.

키워드는 __declspec 단순 선언의 시작 부분에 배치해야 합니다. 컴파일러는 선언에서 * 또는 & 변수 식별자 앞에 배치된 키워드를 경고 __declspec 없이 무시합니다.

__declspec 사용자 정의 형식 선언의 시작 부분에 지정된 특성이 해당 형식의 변수에 적용됩니다. 다음은 그 예입니다.

__declspec(dllimport) class X {} varX;

이 경우 특성이 varX에 적용됩니다. __declspec 또는 struct 키워드 다음에 배치된 특성이 class 사용자 정의 형식에 적용됩니다. 다음은 그 예입니다.

class __declspec(dllimport) X {};

이 경우 특성이 X에 적용됩니다.

간단한 선언에 __declspec 특성을 사용하기 위한 일반적인 지침은 다음과 같습니다.

decl-specifier-seq init-declarator-list ;

decl-specifier-seq 무엇보다도 기본 형식(예int: , , typedeffloat클래스 이름), 스토리지 클래스(예static: , extern) 또는 __declspec 확장을 포함해야 합니다. 무엇보다도 init-declarator-list 선언의 포인터 부분을 포함해야 합니다. 다음은 그 예입니다.

__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

다음 코드는 정수 스레드 지역 변수를 선언하고 값을 사용하여 초기화합니다.

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

Microsoft 전용 종료

참조

C++ 키워드
C 확장 스토리지 클래스 특성