为什么gcc会在几行中拆分错误消息?

时间:2016-01-02 21:44:44

标签: c gcc

有时gcc会在多行中显示单个错误/警告消息。 没什么大不了的,但对我来说这看起来有点奇怪(而且很难看)。

server_inc.c: In function ‘prepareForConn’:
server_inc.c:101: error: ‘filename’ undeclared (first use in this function)
server_inc.c:101: error: (Each undeclared identifier is reported only once
server_inc.c:101: error: for each function it appears in.)

特别是因为位置(server_inc.c:101: error:)是前置的,所以看起来好像有很多错误。

有没有办法改变这个?我在Linux上使用gcc 4.4.7

2 个答案:

答案 0 :(得分:3)

从GCC 4.5开始,第二条消息出现在一行上,并以“note”而不是“error”为前缀:

$ cat test.c
int main() { x=3; }

$ gcc-4.5.4 -c test.c
test.c: In function ‘main’:
test.c:1:14: error: ‘x’ undeclared (first use in this function)
test.c:1:14: note: each undeclared identifier is reported only once for each function it appears in

使用GCC 4.4,我可以重现你所看到的行为,这看起来像一个没有任何解决方法的bug。如果可能,请升级您的编译器。

答案 1 :(得分:0)

可能是因为默认终端尺寸的历史宽度为80列,请参阅this问题。

鉴于此,GCC的行为在默认情况下可以遵循此规则,取自here

  

-fmessage-length=n

     

尝试格式化错误消息,使其适合大约n个字符的行。 g ++默认为72个字符,GCC支持的其余前端为0 。如果n为零,则不进行换行;每条错误消息都出现在一行中。

您可以指定-fmessage-length=0来删除换行。