我知道如何禁用所有未知的#pragma警告。例如,在 如何禁用 #pragma 警告? 中给出了答案。
是否有一种方法可以禁用特定#pragma
的"未知#pragma"警告?例如,如果我禁用了#pragma ugubugu
的警告,则以下代码:
#pragma ugubugu
#pragma untiunti
int main() {return 0;}
当编译时使用以下任一选项:
g++ pragma.cpp -Wall
clang++ pragma.cpp -Wall
应该只会产生一个警告:
warning: ignoring #pragma untiunti
也许有一种简单的方法可以注册一个不起作用的自定义pragma吗?
如果Visual Studio中有这样的选项,那就太好了,但这并不是那么重要。
"但为什么他最终要使用自定义pragma呢?"
我的源代码由两个编译器解析。其中一个编译器有一个特殊的#pragma
是另一个编译器所不知道的。当然,我可能会在每个#pragma
实例周围放置#ifdef COMPILER_IDENTIFICATION_MACRO ... #endif
,但那将很麻烦。
#pragma GCC diagnostic push``#pragma GCC diagnostic ignored "-Wunknown-pragmas"
是一个可行的解决方案,如果你愿意用这种方式来包围你的未知#pragmas
;只是一个注意事项,要用#pragma GCC diagnostic pop
而不是#pragma GCC diagnostic push
来结束它。我在我的代码中使用#pragma mark
语句,以便于我的IDE,并且GCC由于此而发出警告,我想要防止这种情况的发生。 - bluebinary