Поделиться через


Директивы pragma и ключевое слово __Pragma

Директивы pragma указать функции компилятора или операционных зависящие от конкретного компьютера.__pragma Ключевое слово, которое относится к компилятора Microsoft, позволяет директивы pragma код внутри определения макроса.

#pragma token-string
__pragma(token-string)

Заметки

Каждая реализация c и C++ поддерживает некоторые возможности уникальный хост-компьютера или операционной системы.Некоторые программы, например, необходимо соблюдать точный контроль над областей памяти, куда поместить данные или для определенных функций, получают параметры управления.#pragma Директивы позволяют для каждого компилятора для предоставления возможности конкретного компьютера и операционной системы при сохранении общей совместимости с языками c и C++.

Прагма-директивы или операционной системы машинная по определению и обычно различаются для каждого компилятора.Директивы pragma можно использовать в условных инструкциях новые функциональные возможности предварительной обработки, или для предоставления сведений о реализации компилятора.

token-string — Это последовательность символов, определенного компилятора инструкции и аргументы, если таковые имеются.Знак номера (#) должен быть первый знак без пробела в строке, которая содержит директивы pragma; пробелы можно разделить решетки и слово «прагма».После #pragma, написать любой текст, транслятор можно проанализировать как предварительная обработка маркеров.Аргумент #pragma — расширения макроса.

Если компилятор обнаруживает pragma, который не распознается, он выдает предупреждение и продолжает компиляции.

Компиляторами Microsoft C и C++ распознает следующие директивы:

alloc_text

auto_inline

bss_seg

check_stack

code_seg

комментарий

component

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

управляемый

сообщение

omp

один раз

optimize

pack

pointers_to_members1

pop_macro

push_macro

region, endregion

runtime_checks

раздел

setlocale

strict_gs_check

неуправляемый

vtordisp1

предупреждение

1.Поддерживается только компилятором C++.

Прагмы и параметры компилятора

Прагмы предоставляют те же функциональные возможности, как параметры компилятора.При обнаружении директивы pragma в исходном коде переопределяет поведение, заданное параметром компилятора.Например, если указанный /Zp8, можно переопределить этот параметр компилятора для определенных разделов кода с пакета:

cl /Zp8 ...

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

Ключевое слово __pragma()

Определенной Майкрософт

Компилятор также поддерживает __pragma ключевое слово, которое имеет ту же функциональность как #pragma директивы, но может быть используется встроенный в определении макроса.#pragma Директивы нельзя использовать в определении макроса, поскольку компилятор интерпретирует знак номера (#) в директиве для за оператором (#).

В следующем примере кода показано, как __pragma может использоваться ключевое слово в макросе.Этот код взяты из заголовка в образце ACDUAL «Примеры поддержки компилятора COM» 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; \

Завершение определенной Майкрософт

См. также

Ссылки

Прагмы C#

Ключевые слова C++

Другие ресурсы

Ссылка препроцессор C/C++