禁止在包含的文件中{#44}打包警告

时间:2018-10-18 01:17:42

标签: c++ clang warnings suppress-warnings

我正在用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版本:(这是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 :(得分:1)

如果您不想看到由于包含pop.h而为main.c生成的警告,则无法恢复pop.h中的警告选项。在#include“ pop.h”之后恢复警告选项。