#pragma ДирективыПроверка игнорирует большинство #pragma директивы, поскольку они не содержат информации, имеющей отношение к проверке.
Однако при проверке учитывается поведение этих прагматиков.
| Pragma | Влияние на проверку |
|---|---|
| Проверка игнорирует содержимое между прагматами. Если вы используете |
#pragma hdrstop | Для компиляторов Visual C++ ® проверка прекращает обработку предварительно скомпилированных заголовков в том месте, где она встречается с прагматикой. |
#pragma once | Проверка позволяет включить текущий исходный файл только один раз в компиляцию. |
#pragma pack(n), #pragma pack(push[,n]), #pragma pack(pop) | При проверке учитывается выравнивание границ, указанное в прагматиках.
Дополнительные сведения см. в следующем примере. |
#pragma inline global или #pragma inline | Проверка учитывает функцию как встроенная функция. В частности, по умолчанию создается средство проверки кода main не вызывает эти функции напрямую с предположением, что они вызываются в других функциях. |
| Проверка не выполняет встроенную функцию func. |
#error | Проверка прекращается, если она встречается с директивой. Дополнительные сведения см. в разделе Ошибка, связанная с директивой # 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;
}