Директивы #pragma

Верификация игнорирует большинство директив #pragma, потому что они не несут информацию, относящуюся к верификации.

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

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

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

#pragma pack без аргумента обработан как #pragma pack(1).

Для получения дополнительной информации смотрите следующий пример.

#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;
}