使用标记-std=c++14
进行编译的程序也将使用较新版本的C ++实现的功能,并发出如下警告:
warning: inline variables are only available with -std=c++17 or -std=gnu++17
我不希望g ++在这种情况下编译程序,而且不知道为什么它首先要编译。
[我发现添加标志-Werror
会将上述警告转换为错误,以确保程序不会编译,但是我不确定这样做是否建议这样做。
-pedantic-errors
,也就是documented-pedantic-errors在基本标准(请参阅-Wpedantic)要求诊断时给出错误,>在某些情况下在编译时存在未定义的行为,而在另一些情况下不会阻止根据以下条件进行有效程序的编译:到标准...
[我的重点]
“基本标准”是由-std=...
的指定值或默认值命名的C ++标准(或者,如果该标准是像gnu++14
这样的GNU方言,那么它就是该方言所基于的C ++标准) 。
[例如,如果使用std=c++14
编译源代码,该代码使用首先在C ++ 17中合法化的结构,则该代码按照C ++ 14标准格式不正确,因此需要进行诊断。因此,将-pedantic-errors
添加到-std=c++14
将使编译器不得不将C ++ 17创新诊断为错误。
例如,没有-pedantic-errors
$ cat foo.cpp
struct foo
{
inline static const int value = 42;
};
$ g++ -std=c++14 -Wall -Wextra -pedantic -c foo.cpp
foo.cpp:3:5: warning: inline variables are only available with ‘-std=c++17’ or ‘-std=gnu++17’
3 | inline static const int value = 42;
| ^~~~~~
以及-pedantic-errors
$ g++ -std=c++14 -Wall -Wextra -pedantic-errors -c foo.cpp
foo.cpp:3:5: error: inline variables are only available with ‘-std=c++17’ or ‘-std=gnu++17’
3 | inline static const int value = 42;
| ^~~~~~
-pedantic-errors
将使编译器对C ++ 14的一致性比对std-c++14
本身或-Werror
。但是我想你不会反对的。你可以不受约束地是否还实践零警告编译的总体准则(-Werror
)