为什么-Wfatal-errors会关闭有关错误的注释,以及如何重新开启注释?

问题描述

我经常使用-Wfatal-errors进行构建,因为我不需要额外的100个无意义的错误,而编译器英勇地尝试在键入错误后解析源文件的其余部分,使之变得毫无意义。

但是,我注意到这也会关闭有关致命错误本身的诊断记录。例如,使用-Wfatal-errors,我会得到

main.cpp:10:2: error: invalid new-expression of abstract class type 'C'
  new C();

如果我没有使用-Wfatal-errors,我会得到一条提示,告诉我忘记实现哪种虚拟方法

class.hpp:15:2 note: because the following virtual functions are pure within 'C':
class.hpp:28:6   void C::f()

我可以找回这些笔记,同时仍然保持我在单个错误后终止的行为吗?

解决方法

您正在寻找-fmax-errors=1。这将在出现第一个错误后终止编译,但仍会显示该错误的注释。

这里是demo,用于比较这些标志的效果。