在我的代码库中,我有一个包含文件(MyBaseDefinitions.h
)来执行pragma diagnostic push
,然后禁用大量警告。如果要重新启用这些警告,则只需在其后添加另一个标题,即执行pragma diagnostic pop(EndMyBaseDefinitions.h
)。
除了将MyBaseDefinitions.h
放入预编译头文件中的Clang之外,这似乎工作正常。看来诊断“堆栈”在预编译头中丢失了。所以,假设我有MyPrecompiledHeader.h
,它有:
#include "MyBaseDefinitions.h" // does the pragma diagnostic push
然后在我的演示文件中我做了:
#include "MyPrecompiledHeader.h"
#include "HeaderExample1.h" // This file has some warnings in it that we don't care about
#include "EndMyBaseDefinitions.h" // Re-enable warnings
// ...
我会收到警告:
error : pragma diagnostic pop could not pop, no matching push [-Werror,-Wunknown-pragmas]
这是一个已知问题吗?显然,理想情况下我根本不需要做任何禁用警告,但如果可能的话,让我们暂时忽略这个细节。
- 乔尔