Pragma 지시문과 __Pragma 키워드

컴퓨터 또는 운영 체제 특정 컴파일러 기능 Pragma 지시문을 지정합니다.__pragma Microsoft 컴파일러에만 해당 되는 키워드를 사용 하면 코드의 pragma 지시문 내 매크로 정의 합니다.

#pragma token-string
__pragma(token-string)

설명

각 구현은 C 및 C++의 해당 호스트 컴퓨터 또는 운영 체제에 고유한 일부 기능을 지원합니다.예를 들어, 일부 프로그램을 정확 하 게 제어 어디 데이터가 저장 되는 메모리 영역을 위로 하거나 특정 함수 매개 변수를 받는 방법을 제어할 수를 조사 해야 합니다.#pragma 지시문 각 컴파일러 C 및 C++ 언어와 전반적인 호환성을 유지 하면서 컴퓨터와 운영 체제와 관련 된 기능을 제공 하는 방법을 제공 합니다.

Pragma 컴퓨터 또는 운영 체제 관련 정의 의해 이며 일반적으로 컴파일러 마다 다릅니다.새로운 전처리기 기능을 제공 하거나 컴파일러를 구현 시 정의 정보를 제공 합니다 조건문에서 Pragma는 사용할 수 있습니다.

token-string 있는 경우 특정 컴파일러 명령 및 인수를 제공 하는 일련의 문자입니다.숫자 기호 (#); pragma 포함 된 줄에서 첫 번째 공백이 아닌 문자 여야 합니다 공백 문자 숫자 기호 및 "pragma" 단어를 구분할 수 있습니다.다음 #pragma, 번역가 토큰 전처리로 구문 분석할 수 있는 모든 텍스트를 작성 합니다.인수를 #pragma 매크로 확장이 될 수 있습니다.

컴파일러가 인식할 수 없는 pragma를 찾으면 경고가 표시 하 고 컴파일을 계속 수행 합니다.

Microsoft C 및 C++ 컴파일러는 다음 pragma 인식:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

comment

구성 요소

conform1

const_seg

data_seg

사용 되지 않는

detect_mismatch

fenv_access

float_control

fp_contract

함수

hdrstop

include_alias

init_seg1

inline_depth

inline_recursion

intrinsic

loop1

make_public

관리

message

omp

한 번

optimize

pack

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

섹션

setlocale

strict_gs_check

관리 되지 않는

vtordisp1

경고(Warning)

1.C + + 컴파일러에만 지원 됩니다.

Pragma 및 컴파일러 옵션

일부 pragma 컴파일러 옵션 같은 기능을 제공합니다.소스 코드에는 pragma 발생 하면 컴파일러 옵션에 지정 된 동작을 재정의 합니다.예를 들어, 지정한 경우 /Zp8,이 컴파일러 설정을 사용 하 여 코드의 특정 부분을 무시할 수 있습니다 :

cl /Zp8 ...

<file> - packing is 8
// ...
#pragma pack(push, 1) - packing is now 1
// ...
#pragma pack(pop) - packing is 8
</file>

__Pragma() 키워드

특정 Microsoft

또한 컴파일러 지원의 __pragma 동일한 기능을가지고 하는 키워드로는 #pragma 지시문을 있지만 매크로 정의에 사용 되는 인라인 될 수 있습니다.#pragma 컴파일러 지시문 수에 숫자 기호 ('#')을 해석 하기 때문에 지시문의 매크로 정의에 사용할 수 없습니다의 화 연산자 (# #).

다음 코드 예제에서는 __pragma 키워드 매크로를 사용할 수 있습니다.이 코드는 "컴파일러 COM 지원 샘플" ACDUAL 샘플에서 mfcdual.h 헤더의 일부가 나와 있습니다.

#define CATCH_ALL_DUAL \
CATCH(COleException, e) \
{ \
_hr = e->m_sc; \
} \
AND_CATCH_ALL(e) \
{ \
__pragma(warning(push)) \
__pragma(warning(disable:6246)) /*disable _ctlState prefast warning*/ \
AFX_MANAGE_STATE(pThis->m_pModuleState); \
__pragma(warning(pop)) \
_hr = DualHandleException(_riidSource, e); \
} \
END_CATCH_ALL \
return _hr; \

Microsoft 특정 종료

참고 항목

참조

C Pragma

C + + 키워드

기타 리소스

C/C++ 전처리기 참조