如果 C++ 已经需要遵守 C++ 标准来编译,那么 g++ -pedantic 标志有什么意义呢?

Aut*_*hre 3 c++ g++

我不明白 g++ 标志的意义-pedantic

默认情况下,代码不应该遵守 C++ 标准进行编译吗?

如果我添加或不添加此标志,编译器在逻辑上应该发出相同的警告,对吧?

use*_*522 5

如果我添加或不添加此标志,编译器在逻辑上应该发出相同的警告,对吧?

不,编译器通常默认使用 C++ 的变体,具有扩展和相对于标准的微小差异。例如,GCC 默认支持可变长度数组。根据标准,这些格式不正确,因此 GCC 应该为它们提供诊断。-pedantic这样做。

为了最接近标准一致性,您需要-std=c++XX -pedantic-errors将 GCCXX替换为标准版本。-pedantic-errors也可以是-pedantic。对格式不正确的代码的警告足以保证标准的一致性。

无论如何,100% 的一致性是不可能的。语言规范过于复杂,并且并未明确规定所有细节。在某些情况下,即使在更严格的一致性模式下,编译器也会故意偏离规范,因为在实践中将指定的行为视为标准中的缺陷更有意义,即使它尚未得到解决。

如果 C++ 已经需要遵守 C++ 标准来编译 [...]

这个问题确实没有意义。以非循环方式,代码需要遵守标准的命令从何而来?当然,编译器也可以支持格式不符合标准的代码。没有更高的权威要求“C++编译器”必须符合ISO C++标准。

即使编译器希望如此:在某些情况下,标准规定符合标准的编译器应该发出一些诊断以使其符合要求,但它从不要求编译器不支持任何给定的有效代码。