解释跨多行分割的gcc警告/错误消息

时间:2017-08-22 14:01:32

标签: c++ gcc compiler-errors

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)"

在这个例子中很明显,因为这是一个小例子,我理解代码中发生了什么。但是,如果我有一个更长的错误消息输出,我怎么知道何时读取一些连续的错误消息?

如何知道下一条错误消息何时继续发出给定的错误消息?何时不是?

0 个答案:

没有答案