compiling

如何禁用g++显示错误的注释?

在编译时,错误往往伴随着一系列冗长的注释(青色)。是否有一个g++的标志可以禁用这个,只显示错误本身?


编译器不会为您执行此操作,但(到目前为止...)编译器开发人员遵循从其他编译器改编而来的长期(30 多年)约定,该约定在第一行提供基本信息,使用 error: warning: 标记警告。如果您为这些 grep stderr,您将看到最少的警告/错误信息。

grep 是一个很好的起点(“grep -n”输出本身很有用)。这些消息遵循文件名、行号、消息的模式,这对几种工具都是通用的。我在 vi-like-emacs 中使用它。

最近(2014 年)gcc/g++ 开始向消息中添加“调用堆栈”,从而提供额外的信息。 -P 选项关闭的行号(在此处注明),但这似乎没有完全集成到会抑制调用堆栈的形式中。

使用 clang 对此无济于事;它也可能非常冗长。gcc/g++ 开发已经添加了很多信息,如此所述。




编译时,错误通常伴随着冗长的痕迹(青色)。是否有一个g++标志来禁用它,只显示错误本身?

  • 您可以使用旧的且不再受支持的工具,例如STLFilt

  • 您可以切换到Clang ,或使用它仅报告错误并在GNU g++中执行最终编译。

  • 你可以更加熟悉STL,这将使破译更加容易。

    对 STL 以及如何使用它的良好理解将帮助您从一开始就避免很多错误。其次,错误消息通常指的是 STL 源代码中的函数——如果您大致了解 STL 是如何实现的,这对于破译错误消息的内容非常有帮助。最新版本的g++编译器有时会改进输出,使其更有帮助且不那么冗长。

不完全是你想要的,但它可以缩短输出。

  • 使用-fmax-errors标志或-Wfatal-errors选项:

    -fmax-errors=n

    将错误消息的最大数量限制为 n,此时 GCC 会退出而不是尝试继续处理源代码。如果 n 为 0(默认值),则生成的错误消息的数量没有限制。如果还指定了 -Wfatal- errors,则-Wfatal-errors优先于该选项。

    -Wfatal-errors

    这个选项会使编译器在第一次发生错误时中止编译,而不是试图继续编译并打印更多的错误信息。