【发布时间】:2020-03-26 18:38:32
【问题描述】:
我正在使用一个内联全局变量,它可以很好地实现它。
class MyClass {
public:
void Func() {
}
}
inline MyClass myClass; // global inline variable
上面的方法很适合我的目的,但是当我的代码使用低于 C++17 的编译器在 gcc 上编译时,我会收到警告。以下是警告
警告:内联变量仅适用于 -std=c++1z 或 -std=gnu++1z
问题:
如何抑制 gcc 上的警告?
我试图通过使用#pragma 来抑制警告,如下所示
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wc++17-extensions"
inline MyClass myClass;
#pragma GCC diagnostic pop
以上#pragma 技术适用于clang,但看起来像GCC 不理解#pragma?我只是想强力压制 GCC 上的警告。我该怎么做?
看起来 gcc 警告选项列表甚至没有提到这个? https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
我正在使用 gcc (GCC) 7.3.0
【问题讨论】:
-
为什么不照警告说的做,并使用
-std=c++1z标志? -
我的意思是用
-std=c++1z作为gcc命令的命令行选项来编译它?如果您的构建系统支持,可以将其添加到CPPFLAGS。 -
看起来我的构建系统不支持。我有点不确定是否可以为这么小的东西更改构建系统。顺便说一句,我正在使用 Cmake。 但是,我的问题更多是关于如何通过在 cpp 源文件中使用某些标志来强制使警告静音(假设我的构建系统支持 C++11)
-
好的。有没有办法让我的
CMakeLists.txt发出警告?这对我来说是第二个首选选项,但如果根本无法从源代码中消除此警告,那么我将不得不在我的CMakeLists.txt中做一些事情。 -
如果单例是反模式,那么你也不应该使用内联变量;这只是同一事物的不同语法。
标签: gcc g++ c++17 compiler-warnings