#pragma
Верификация игнорирует большинство директив #pragma
, потому что они не несут информацию, относящуюся к верификации.
Однако верификация учитывает поведение этих прагм.
Прагма | Эффект на верификацию |
---|---|
#pragma asm и #pragma endasm , или #asm и #endasm | Верификация игнорирует содержимое между прагмами. |
#pragma hdrstop | Для Визуального C ++® компиляторы, верификация прекращает обрабатывать предварительно скомпилированные заголовки в точке, где это сталкивается с прагмой. |
#pragma once | Верификация позволяет текущему исходному файлу быть включенным только однажды в компиляции. |
#pragma pack(n) , #pragma pack(push[,n]) , #pragma pack(pop) | Верификация учитывает выравнивание границ, заданное в прагмах.
Для получения дополнительной информации смотрите следующий пример. |
| Верификация останавливается, если она сталкивается с директивой. Для получения дополнительной информации смотрите Ошибку, Связанную с #error Директивой. |
Для получения дополнительной информации о прагмах см. свою документацию компилятора. Если верификация не учитывает определенную прагму из предыдущего списка, смотрите, задали ли вы правильный компилятор для своей верификации. Для получения дополнительной информации смотрите Compiler (-compiler)
.
Например, в этом коде, директивах сила
новый контур выравнивания в структуре. Пользовательское утверждение регистрируется в функции #pragma pack(n)
main
, являются зелеными, потому что верификация учитывает поведение директив. Верификация использует эти опции:
Target processor type (-target)
: i386
(char
: 1 байт, int
: 4 байта)
Compiler (-compiler)
: gnu4.9
#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; }