Noa*_*der 11 c++ gcc g++ c++20
标题很清楚,有没有办法在编译某些 C++ 代码时禁用 gcc(扩展)的每个非标准功能。我以前总是与and-pedantic-errors一起使用,根据 gcc 手册页,第一个执行以下操作-Wall-Wextra
每当基本标准(参见 -Wpedantic)需要诊断时就给出错误,在某些情况下相当于 -Werror=pedantic,因为此选项会启用错误,而不是特定库的限制。但是,如果 -Wpedantic 与 -Wformat 一起使用,则 -pedantic-errors 会将警告变为错误。-Wall 或 -Wpedantic。
然而,其结果是它几乎禁用了所有不符合标准的扩展。我对以下代码使用 gcc 编译感到震惊
void foo(std::vector<auto>) { ... }
Run Code Online (Sandbox Code Playgroud)
使用该-std=c++20标志,如果我们将其降低到,-std=c++17我们会收到一条错误消息,提示使用它,-std=c++20因为它是“c++20 功能”。然而 clang 或 msvc 都不愿意编译这个。经过进一步研究后,我收到以下通知
这是一个 GCC 扩展,并且在设计上被接受。
-pedantic-errors这是相当令人不安的,因为即使是 , 的保护措施-Wall也-Wextra没有注意到这一点,这让我质疑 gcc 可能会默默地传递哪些其他扩展。那么问题来了;有没有办法完全禁用每个 gcc 扩展?
编辑:来自如何禁用 GNU C 扩展?
你不能
| 归档时间: |
|
| 查看次数: |
764 次 |
| 最近记录: |