C++ 抑制包含文件中关于#pragma包的警告

C++ 抑制包含文件中关于#pragma包的警告,c++,clang,warnings,suppress-warnings,C++,Clang,Warnings,Suppress Warnings,我正在用叮当声建立一些代码。这是我正在做的一个精简版本。(请记住,在精简过程中,我已经尽可能删掉了所有不相关的细节,包括任何可能让人明白我为什么要这么做的内容。) 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 主

我正在用叮当声建立一些代码。这是我正在做的一个精简版本。(请记住,在精简过程中,我已经尽可能删掉了所有不相关的细节,包括任何可能让人明白我为什么要这么做的内容。)

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
主要条款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的内容使它们对称,因为在实践中,它比这里显示的要多一些

如果有的话,我的选择是什么

铿锵版本:(这是Xcode 10附带的版本-不要认为Xcode 9中有此警告)


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

是的,我想警告将源于
#include
而不是
#pragma pack pop
,不是吗。。。
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