Я создаю некоторый код с помощью Clang.Вот урезанная версия того, что я делаю.(Пожалуйста, имейте в виду, что в процессе урезания я вырезал все не относящиеся к делу детали, которые я могу, включая все, что могло бы сделать очевидным, почему я действительно хотел бы сделать это.)
push.h:
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpragma-pack"
#pragma pack(push)
#pragma pack(1)
pop.h:
#pragma pack(pop)
#pragma GCC diagnostic pop
main.c:
#include "push.h"
struct Fred {char x;};
#include "pop.h"
Скомпилируйте это так:
clang -Wall -pedantic -c main.c
При этом я получаю предупреждение:
tmbp ~/tmp/pushpack % clang -Wall -pedantic -c main.c
main.c:3:10: warning: the current #pragma pack aligment value is modified in the included file [-Wpragma-pack]
#include "pop.h"
^
note: previous '#pragma pack' directive that modifies alignment is here
1 warning generated.
tmbp ~/tmp/pushpack %
Как я могу отключить это предупреждение в этом случае?Я хотел бы сделать это, добавив что-то в pop.h, если это возможно.
Я не хочу подавлять предупреждение глобально, потому что кажется, что оно может быть полезным в долгосрочной перспективе(даже если нет, когда я включаю push.h и pop.h).
Я не хочу добавлять дополнительный мусор к каждому включению pop.h, потому что в моем не урезанном фактическомпрограмма, потому что их множество.
Я не хочу иметь вместо этого просто голый #pragma pack(pop)
, потому что я бы предпочел, чтобы вещи были симметричными.
Я не хочучтобы сделать их симметричными, вставив содержимое push.h, потому что на практике это немного больше, чем показано здесь.
Какие у меня есть варианты?
Clang version: (это тот, который поставляется с Xcode 10 - не думайте, что это предупреждение было в Xcode 9)
tmbp ~/tmp/pushpack % clang --version
Apple LLVM version 10.0.0 (clang-1000.11.45.2)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin