5次错误后如何指示GCC停止?


80

发现5个错误后是否可以指示GNU c ++编译器停止?在文档中找不到此内容。

Answers:


92

命令行选项指示编译器在N个错误后放弃。GCC 4.6和更高版本中提供了此选项。-fmax-errors=N

命令行选项-Wfatal-errors指示编译器在发生一个错误后放弃。此选项在GCC 4.0及更高版本中提供。

在这两种情况下,除非您也指定,否则警告不会计入限制-Werror


5
我会给+1,但要针对-Werror。我认为绝对应该将警告视为错误,因为大多数警告都是错误代码的指示。
greyfade 2010年

3
@greyfade,我也认为警告通常应被视为必须解决,但是不幸的是,某些gcc的警告可能会触发或不触发,具体取决于优化级别,系统标头的内容以及您无法轻松控制的许多其他事情。因此,您可能会在规范的构建平台上得到所有警告,但随后一些糟糕的schmuck尝试在更奇特的环境中进行构建,然后崩溃。
zwol

2
@Zack,这不是-Wno-system-headers的目的吗?
山姆·米勒

2
我听说过的关于不初始化编译器-Wuninitialized误报的变量的论据是:它浪费了I-cache到死的但不是可证明的死存储指令上;如果某种变化使警告成为真正的肯定,我们希望valgrind予以抓住。
zwol

3
不幸的是,链接器不支持-fmax-errorsflag(从arm-none-eabi-gcc 5.4.1开始)。我正在使用option -finstrument-functions,由于__cyg_profile_func_enter函数未定义,因此出现了数百个错误。
lorcap

45

您可以使用gcc选项:

-fmax-errors=5

以此目的。


这应该是一条评论。

9
@Telthien为什么?这似乎是我的答案。

13
@Telthien stackoverflow.com/questions/how-to-answer表示“使提问者朝正确方向前进的任何答案都是有帮助的”,而“简洁也可以接受”。答案旨在提供解决方案,有时可以用一个句子完成。

如果它很短就有用,则没有理由延长答案。特别是不是为了冗长或询问tldr。
n611x007 2013年

1
感谢您让我知道自从写答案以来已添加了一个新功能。
zwol


1

我必须问你为什么要这样做。有时,代码中存在的错误不是第一个,甚至不是前五个错误中没有。有时,超出此范围,只有向下滚动列表才能识别。如果您对编译时间感到不便,那么更好的方法可能是将代码分解并将其放入较小的库中。或者,如果您担心滚动到命令行屏幕之外的内容,请使用“ >>”运算符将消息传递到文件中。


1
这只是错误日志可读性的问题。至少在我的情况下,至少有5个错误足以理解问题:)
yegor256

14
真?我的经验恰好相反-尤其是在C ++中,除非我正在进行特定种类的重构工作,从而产生许多离散错误(例如,将参数更改为常用方法),否则第一个错误很可能是唯一一无所有的东西。
zwol

@ FaZend.com,我知道了,很抱歉我没有提供答案。Zack在下面的回答可能是最好的答案,除非您要编写一个小脚本来解析这些错误并在输出5个错误后终止进程。(尽管我可能对此声明一无所知。)
麦蒂

1
人们对这个问题的想象力非常有限。那这种情况呢?您是第一次将程序移植到新环境中。您会遇到一些错误,编译中止。您不知道旧环境和新环境之间有多少不兼容。您想知道的是情况有多严重,代码中有多少个问题。您希望将所有错误汇总在一个庞大的列表中,以便可以估计修复所有错误所需的时间。
Phill Apley

4
@PhillApley这样做的问题是,单个错误通常会引发一系列连续错误(有些带有大量STL建议),因此,如果根据错误和警告的数量来判断,您可能会高估所需的工作量并付出向上。
Evgeni Sergeev
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.