gcc / g ++编译器(gcc 4.9.2)跨多行输出错误消息,有时多个连续行应该一起读取,以便获得所有细节和最全面的解释关于错误。
我的问题是,您如何判断多个错误行应该一起读取,以及何时自行读取给定的错误行?
换句话说,当下一条错误消息继续出现错误消息时,它何时只是一行独立的错误消息?
这是我编写的程序的一个示例,故意无法以我理解的方式编译,我知道多行错误消息都是一条消息的一部分,并且具体告诉我一件事:
代码:
1 #include <iostream>
2
3
4 using std::cout;
5 using std::endl;
6
7 class MyClass
8 {
9 public:
10 // Not OK because a gets initialised before b
11 // See warning in gcc output
12 MyClass(int x) : b(x), a(b-1), c(0)
13 { cout << "a=" << a
14 << "\nb=" << b
15 << "\nc=" << c << "\n";
16 };
17
18 private:
19 int a;
20 int b;
21 int c;
22 };
编译输出:
user@computer:$ make proggy
g++ -std=c++98 -pedantic -Wall -Werror proggy.cpp -o proggy
proggy.cpp: In constructor ‘MyClass::MyClass(int)’:
proggy.cpp:20:13: error: ‘MyClass::b’ will be initialized after [-Werror=reorder]
int b;
^
proggy.cpp:19:13: error: ‘int MyClass::a’ [-Werror=reorder]
int a;
^
proggy.cpp:12:9: error: when initialized here [-Werror=reorder]
MyClass(int x) : b(x), a(b-1), c(0)
^
cc1plus: all warnings being treated as errors
<builtin>: recipe for target 'proggy' failed
make: *** [proggy] Error 1
请注意,单个问题的完整消息(即使用顺序与初始化顺序不匹配)实际上是在三条错误消息行上分开的。
第一条错误消息显示:
proggy.cpp:20:13: error: ‘MyClass::b’ will be initialized after
这显然是一句尚未完成的句子。它需要附加两个错误消息。如果我只是单独阅读第二条错误消息,那就毫无意义了:
proggy.cpp:19:13: error: ‘int MyClass::a’ [-Werror=reorder]
int a;
所以,我需要将所有这些消息合并为一个并形成一个句子来说明问题所在。那句话就是这样:
"‘MyClass::b’ will be initialized after ‘MyClass::a’ when initialized
here (line 12) --> MyClass(int x) : b(x), a(b-1), c(0)"
在这个例子中很明显,因为这是一个小例子,我理解代码中发生了什么。但是,如果我有一个更长的错误消息输出,我怎么知道何时读取一些连续的错误消息?
如何知道下一条错误消息何时继续发出给定的错误消息?何时不是?