我有一个C单头库,我想在我的C ++项目中使用。通常,我只包含该文件,这很好,因为C ++几乎是C的超集。但是,该库的goto
跳过了初始化,违反了C ++标准。
我可以通过在GCC上启用-fpermissive
编译器标志来解决此问题,但是我希望我的其余代码能够正确触发错误。
有没有一种方法可以仅针对这个头文件启用它(可能类似于#pragma GCC diagnostic XXX
)。
最佳答案
有一个#pragma GCC optimize "blah"
或函数属性__attribute__((optimize("blah")))
,其作用类似于该文件/该特定函数的其余部分给出的参数-fblah
,但似乎不适用于-fpermissive
:
$ cat foo.cpp
#pragma GCC optimize "permissive"
void foo(int x) {
}
$ g++-8 -c -Wall -Wextra foo.cpp
foo.cpp:1:22: warning: bad option ‘-fpermissive’ to pragma ‘optimize’ [-Wpragmas]
#pragma GCC optimize "permissive"
^~~~~~~~~~~~
foo.cpp:3:16: warning: bad option ‘-fpermissive’ to attribute ‘optimize’ [-Wattributes]
void foo(int x) {
一种选择是将需要此功能的函数本身放在一个文件中,并配置您的构建系统以使用
-fpermissive
仅编译该文件,尽管这样会破坏仅标头模型。或修复代码,使其根本不需要该选项。关于c++ - 如何为一段代码启用-fpermissive,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59641669/