gpt4 book ai didi

c++ - 确保 g++ 不会使用新版本 C++ 中添加的功能编译程序

转载 作者:行者123 更新时间:2023-12-02 10:17:22 25 4
gpt4 key购买 nike

用标志编译 -std=c++14编译使用在较新版本的 C++ 中实现的功能的程序,并发出如下警告:

warning: inline variables are only available with -std=c++17 or -std=gnu++17

我不希望 g++ 在这种情况下编译程序,并且首先不知道它为什么会这样做。

我发现添加标志 -Werror将上述警告转换为错误,确保程序不会编译,但我不确定这是否是推荐的方法。

最佳答案

专门为使用仅合法的语言功能而引发编译器错误
在 C++ 标准中比您选择的标准晚,这是最有针对性的诊断选项
大概是 -pedantic-errors , 即 documented

-pedantic-errors

Give an error whenever the base standard (see -Wpedantic) requires a diagnostic, in some cases where there is undefined behavior at compile-time and in some other cases that do not prevent compilation of programs that are valid according to the standard...


[我的重点]
这里的“基本标准”是由指定或默认值 -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)

关于c++ - 确保 g++ 不会使用新版本 C++ 中添加的功能编译程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61472933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com