编译器不会为您执行此操作,但是(到目前为止...)编译器开发人员正在遵循从其他编译器改编而来的长期(30 多年)约定,该约定在第一行提供基本信息,使用 或error:
来warning:
标记警告。如果您 grep stderr查找这些内容,您将看到最少的警告/错误信息。
grep 是一个很好的起点(并且“grep -n”输出本身很有用)。这些消息遵循多种工具通用的文件名、行号、消息的模式。我在 vi-like-emacs 中使用了它。
最近(2014 年)gcc/g++ 开始向消息添加“调用堆栈”,以提供额外的信息。-P
这依赖于对预处理器的更改来跟踪行号,可以使用选项(此处注明)关闭行号,但这似乎未完全集成在会抑制调用堆栈的形式中。
使用 clang 对此没有多大帮助;它也可能非常冗长。gcc/g++ 开发添加了许多消息,如此处所述。