Подавление предупреждения о #pragma pack во включенном файле - PullRequest
0 голосов
/ 18 октября 2018

Я создаю некоторый код с помощью 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

1 Ответ

0 голосов
/ 18 октября 2018

Невозможно восстановить параметры предупреждений в pop.h, если вы не хотите видеть предупреждение, сгенерированное для main.c в результате включения pop.h.Восстановите параметры предупреждений после `#include" pop.h ".

...