exponenta event banner

Допущения о #pragma Директивы

Проверка игнорирует большинство #pragma директивы, поскольку они не содержат информации, имеющей отношение к проверке.

Однако при проверке учитывается поведение этих прагматиков.

PragmaВлияние на проверку

#pragma asm и #pragma endasm

#asm и #endasm

Проверка игнорирует содержимое между прагматами.

Если вы используете #pragma inline_asm func, проверка считает, что функция func содержит инструкции по уровню сборки и игнорирует тело функции.

#pragma hdrstopДля компиляторов Visual C++ ® проверка прекращает обработку предварительно скомпилированных заголовков в том месте, где она встречается с прагматикой.
#pragma onceПроверка позволяет включить текущий исходный файл только один раз в компиляцию.
#pragma pack(n), #pragma pack(push[,n]), #pragma pack(pop)

При проверке учитывается выравнивание границ, указанное в прагматиках.

#pragma pack без аргумента рассматривается как #pragma pack(1).

Дополнительные сведения см. в следующем примере.

#pragma inline global func или #pragma inline funcПроверка учитывает функцию func как встроенная функция. В частности, по умолчанию создается средство проверки кода main не вызывает эти функции напрямую с предположением, что они вызываются в других функциях.

_Pragma("inline=never") func

Проверка не выполняет встроенную функцию func.
#error message

Проверка прекращается, если она встречается с директивой.

Дополнительные сведения см. в разделе Ошибка, связанная с директивой # error.

Дополнительные сведения о прагматиках см. в документации компилятора. Если при проверке не учитывается определенная прагматика из предыдущего списка, проверьте, указан ли правильный компилятор для проверки. Дополнительные сведения см. в разделе Compiler (-compiler).

Например, в этом коде директивы #pragma pack(n) принудительно создать новую границу трассы в структуре. Проверка утверждения пользователя в main функции зеленые, поскольку проверка учитывает поведение директив. При проверке используются следующие опции:

#include <assert.h>

#pragma pack(2)

struct _s6 {
    char c;
    int i;
} s6;

#pragma pack() /* Restores default packing: pack(4) */

struct _sb {
    char c;
    int i;
} sb;

#pragma pack(1)

struct _s5 {
    char c;
    int i;
} s5;


int main(void) {
    assert(sizeof(s6) == 6);
    assert(sizeof(sb) == 8);
    assert(sizeof(s5) == 5);
    return 0;
}