如何抑制 GCC 编译器警告:内联变量仅适用于 -std=c++1z 或 -std=gnu++1z
How to suppress GCC compiler warning: inline variables are only available with -std=c++1z or -std=gnu++1z
我正在使用一个内联全局变量,它非常适合它。
class MyClass {
public:
void Func() {
}
}
inline MyClass myClass; // global inline variable
以上对于我的目的来说效果很好,但是当我的代码在 gcc 上使用低于 C++17 的编译器编译时,我收到警告。以下是警告
warning: inline variables are only available with -std=c++1z or
-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
要了解为什么无法抑制此警告,请查看如果使用不支持内联变量的编译器编译代码会发生什么情况。 (Inline variable support started with gcc 7。)旧版本的 gcc 处理您的代码并吐出 error: 'myClass' declared as an 'inline' variable
。不是警告,而是无法抑制的错误。急停;未生成目标代码。
较新版本的 gcc 能够提供更多的理解和帮助,但同时它们也有义务与旧编译器保持一定程度的兼容性。这些较新的编译器可以识别此 C++17 功能,并且已确定忽略“inline
”会将错误降级为警告(编译不一定需要停止)。此外,该消息还提供了有关如何解决这种情况的信息(假设代码是正确的)。同时,这个警告本质上仍然是旧版本gcc产生的错误,只是进行了改头换面以使其更加用户友好。与旧错误一样,它无法被抑制。 您的选择是编写有效的 pre-17 代码或启用 C++17 功能。
我正在使用一个内联全局变量,它非常适合它。
class MyClass {
public:
void Func() {
}
}
inline MyClass myClass; // global inline variable
以上对于我的目的来说效果很好,但是当我的代码在 gcc 上使用低于 C++17 的编译器编译时,我收到警告。以下是警告
warning: inline variables are only available with -std=c++1z or -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
要了解为什么无法抑制此警告,请查看如果使用不支持内联变量的编译器编译代码会发生什么情况。 (Inline variable support started with gcc 7。)旧版本的 gcc 处理您的代码并吐出 error: 'myClass' declared as an 'inline' variable
。不是警告,而是无法抑制的错误。急停;未生成目标代码。
较新版本的 gcc 能够提供更多的理解和帮助,但同时它们也有义务与旧编译器保持一定程度的兼容性。这些较新的编译器可以识别此 C++17 功能,并且已确定忽略“inline
”会将错误降级为警告(编译不一定需要停止)。此外,该消息还提供了有关如何解决这种情况的信息(假设代码是正确的)。同时,这个警告本质上仍然是旧版本gcc产生的错误,只是进行了改头换面以使其更加用户友好。与旧错误一样,它无法被抑制。 您的选择是编写有效的 pre-17 代码或启用 C++17 功能。