这张便条说:
-ansi:告诉编译器实现ANSI语言选项.这会关闭GCC的某些与ANSI标准不兼容的"功能".
-pedantic:与-ansi此结合使用,这告诉编译器严格遵守ANSI标准,拒绝任何不符合的代码.
首先要做的事情:
-pedantic和-ansi选项的目的是什么(我无法理解上面的描述)?除了-Wall之外,其他人发现的警告有用吗?
http://gcc.gnu.org/onlinedocs/gcc-4.3.2/gcc/Warning-Options.html
标题很清楚,有没有办法在编译某些 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 扩展?
你不能