是否在g ++中使用-pedantic标志?


16

我正在学习C ++,并且正在Linux上使用g ++进行练习。

  1. 我想知道从事程序员工作的人们是否使用g ++ -pedantic标志及其在现实世界中的重要性。

  2. 那其他编译器又如何呢?这是否已成为事实上的标准?

我很感兴趣,因为我正在阅读C ++ Primer,作者指出在数组定义中使用非常量表达式作为维是非法的,并且默认情况下g ++允许这样做。也许还有其他我不知道的事情。



Answers:


21

是的,绝对要这样做。事实上,你需要学习手册页面,打开更多的警告不是-pedantic-Wall会做。

不,没有标准。以MSVC /W4为例。


7
+1,我通常会这样做-Wall -Wextra -Werror -pedantic -std=c++0x:)
greyfade

4
@JaredBurrows:实际上,我已经停止使用-pedanticC ++,因为GCC的手册暗示它仅适用于C,并且我已经开始-std=c++14在新项目中使用。
greyfade 2015年

1
@greyfade啊,我应该说,-Wall -Wextra -Werror -std=c++14:)
Jared Burrows

1
我刚刚发现-pedantic-errors给出错误而不是警告。
Galik

6
@VillasV好,-Werror将所有警告变为错误。但是-pedantic-errors只会因Standard ICO C++违反而导致错误。
Galik '16

10

虽然我已经有一段时间没有编程C ++了,但建议您使用此标志。它可以帮助您创建符合标准的代码,并使每个人的生活更加轻松。AFAIK,大多数其他编译器不支持gcc / g ++扩展。

例如,当我不能仅仅因为原始开发人员决定针对非标准编译器扩展进行编码而无法编译代码时,我就讨厌它。

我敢打赌,用g / g ++编译的大量用C / C ++编写的linux程序(比如说20%)将无法编译,这让我有点难过。始终遵守标准。


2
上一次我尝试使用其他编译器时,我想说有20%可以与其他编译器一起使用,而80%则取决于gcc扩展。
杰里·科芬

6

我个人使用:

-Wall -Wextra -Wshadow -Weffc ++ -Wstrict-aliasing -ansi -pedantic -Werror

因此可以打开许多警告,但更重要的是将所有警告视为错误(因为大多数警告是您思想中的逻辑错误)。


您会在2019年向此列表添加任何内容吗?
Ayxan

1
@Ayxan这是我建议大家使用的最低设置。但是还有很多有用的东西。但是您需要整理一下文档,看看它们是否对您有用。看看-Wunreachable-code -Wno-long-long
Martin York

1
@Ayxan建立配置文件代码时:-g -pg -fprofile-arcs -ftest-coverage
Martin York

1
@Ayxan进行调试时-g -O0
Martin York

1
@Ayxan建立生产代码时-O3
Martin York

1

使用该-pedantic标志非常重要。

我只想补充一点,在当前标准下,建议使用类似于以下内容的内容:

-std=c++17 -Wall -Wextra -Werror -Wpedantic -pedantic-errors

哪里:

  • -std=c++17告诉它遵守2017年发布的C ++标准的修订版,您可以在此处阅读有关它的更多信息

  • -Wall 告诉:

    启用所有有关某些用户认为可疑的构造的警告,即使与宏结合使用也可以避免(或修改以防止出现该警告),也就是某些警告集合。

  • -Wextra 告诉它启用更多警告,但还不是全部。

  • -Werror 告诉它使所有警告变为错误。

  • -Wpedantic或只是-pedantic告诉它:

    发出严格的ISO C和ISO C ++要求的所有警告;拒绝所有使用禁止扩展名的程序,以及其他不遵循ISO C和ISO C ++的程序。

  • -pedantic-errors 告诉它在基本标准(请参阅-Wpedantic)需要诊断时给出错误。


该设置通常不仅对初学者有用,因为他们将逐渐了解每个警告都有可能导致错误,并且也可以正常使用。

在GNU / GCC页面上,将详细描述所有警告选项。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.