我有一个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/

10-11 21:06