IT

__declspec은 무엇이며 언제 사용해야합니까?

lottoking 2020. 6. 21. 19:11
반응형

__declspec은 무엇이며 언제 사용해야합니까?


내가 __declspec읽는 코드에서 인스턴스를 보았습니다 . 무엇입니까? 그리고이 구조를 언제 사용해야합니까?


이것은 C ++ 언어에 대한 Microsoft 고유의 확장으로, 스토리지 클래스 정보로 유형 또는 함수의 속성을 지정할 수 있습니다.

선적 서류 비치

__declspec (C ++)


표준 예제는 __declspec(dllimport)및로 __declspec(dllexport), 링커에서 DLL로 (또는 각각) 심볼을 가져오고 내보내도록 지시합니다.

// header
__declspec(dllimport) void foo();


// code - this calls foo() somewhere in a DLL
foo();

( __declspec(..)마이크로 소프트의 특정 내용을 마무리-호환성을 달성하기 위해 보통 매크로로 마무리합니다)


주로 심볼을 가져 오거나 심볼을 공유 라이브러리 (DLL)로 내보내는 데 사용됩니다. 비주얼 C ++ 및 GCC 컴파일러 지원 모두 __declspec(dllimport)__declspec(dllexport). 다른 용도 (일부 Microsoft 만 해당)는 MSDN에 문서화 되어 있습니다.


__declspec 키워드 를 설명하는 또 다른 예 :

Windows 커널 드라이버를 작성할 때 인라인 어셈블러 코드를 사용하여 고유 한 프롤로그 / 에필로그 코드 시퀀스를 작성하려고 하므로 벌거 벗은 속성으로 함수를 선언 할 수 있습니다 .

__declspec( naked ) int func( formal_parameters ) {}

또는

#define Naked __declspec( naked )
Naked int func( formal_parameters ) {}

알몸 (C ++)을 참조하십시오


기본적으로 Microsoft가 C ++ 확장을 도입하여 향후 표준 C ++ 확장과 충돌하지 않도록합니다. __declspec을 사용하면 함수 또는 클래스를 특성화 할 수 있습니다. 정확한 의미는 __declspec의 특성에 따라 다릅니다. 예를 들어 __declspec (naked)은 프롤로그 / 에필로그 생성 (인터럽트 처리기, 포함 가능한 코드 등)을 억제하고 __declspec (thread)는 변수를 스레드 로컬로 만듭니다.

__declspec 특성의 전체 목록은 MSDN에서 사용할 수 있으며 컴파일러 버전 및 플랫폼에 따라 다릅니다.


8 년이 지났음을 알고 있지만 MRuby에서 발견 된이 코드를 공유하여 __declspec()꿀벌과 같은 수준에서 꿀벌을 어떻게 사용할 수 있는지 보여줍니다 export keyword.

/** Declare a public MRuby API function. */
#if defined(MRB_BUILD_AS_DLL)
#if defined(MRB_CORE) || defined(MRB_LIB)
# define MRB_API __declspec(dllexport)
#else
# define MRB_API __declspec(dllimport)
#endif
#else
# define MRB_API extern
#endif

참고 URL : https://stackoverflow.com/questions/2284610/what-is-declspec-and-when-do-i-need-to-use-it

반응형