Директивы 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++ распознает следующие директивы:
loop1 |
||
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; \
Завершение определенной Майкрософт