禁止显示有关包含文件中 #pragma 包的警告

Suppressing warning about #pragma pack in included file

本文关键字:#pragma 警告 文件 包含 禁止显示      更新时间:2023-10-16

我正在用clang构建一些代码。这是我正在做的事情的精简版本。(请记住,在削减过程中,我已经删掉了所有不相关的细节,包括任何可能表明我可能真正想要这样做的细节。

噗嗤

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wpragma-pack"
#pragma pack(push)
#pragma pack(1)

啪��

#pragma pack(pop)
#pragma GCC diagnostic pop

主.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 版本:(这是 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

如果您不想看到因包含pop.h而导致的main.c生成的警告,则无法恢复pop.h中的警告选项。恢复"#include "pop.h"之后的警告选项。