我知道如何禁用 所有 未知的#pragma 警告。例如,在 如何禁用#pragma 警告中给出了答案? .
有没有办法为一个特定的编译指示禁用“未知编译指示”警告?例如,如果我禁用 #pragma ugubugu
的警告,则以下代码:
#pragma ugubugu
#pragma untiunti
int main() {return 0;}
编译时:
g++ pragma.cpp -Wall
clang++ pragma.cpp -Wall
应该产生一个警告:
warning: ignoring #pragma untiunti
例如,也许有一种简单的方法来注册一个什么都不做的自定义编译指示?
很高兴知道 Visual Studio 是否也有这样的选项,但这并不重要。
“但为什么他最终会玩自定义编译指示?”
我的源代码由两个编译器解析。在其中一个中,有一个特殊的 #pragma
这是另一个未知的。当然,我可以将 --- 放在 #ifdef COMPILER_IDENTIFICATION_MACRO ... #endif
#pragma
每个实例周围,但这会很麻烦。
原文由 CygnusX1 发布,翻译遵循 CC BY-SA 4.0 许可协议
我有理由确定没有任何方法可以做到这一点。
GCC 和 Clang 都有内部接口,允许语言前端向预处理器注册
#pragma
处理程序 - 请参阅 GCC 的libcpp/directives.c
和 Clang 的lib/Lex/Pragma.cpp
但是,正如我所看到的,没有什么可以让您根据命令行选项修改注册的处理程序(超出您正在编译的语言变体所暗示的内容)。请注意,投票最高的答案比那里接受的答案要好。
-Wno-unknown-pragmas
可以简单地添加到命令行 _之后_(如-Wall
),这会打开警告。从更哲学的角度来看,我认为这确实是正确的解决方案,尽管它可能很麻烦!
考虑到 ---
#pragma
#pragma
的全部意义在于提供一种机制用于在编译器中调用实现定义的行为。(如果您最终这样做,请注意 Clang 定义了
__clang__
,但 GCC 和 Clang 都 定义了__GNUC__
。)