为什么gcc会将错误消息分成几行?

为什么gcc会将错误消息分成几行?,c,gcc,C,Gcc,有时,gcc会在几行中显示一条错误/警告消息。 没什么大不了的,但在我看来它有点奇怪(而且难看) 特别是因为位置(server_inc.c:101:error:)是预先设置的,所以看起来好像有很多错误 有什么办法可以改变这一点吗?我在Linux上使用的是GCC4.4.7。可能是因为默认终端大小的历史宽度为80列,请参见问题 有鉴于此,GCC的行为默认情况下可以遵循以下规则: -fmessage length=n 尝试格式化错误消息,使其适合大约n个字符的行默认值为72个字符(对于g++)和0(对

有时,
gcc
会在几行中显示一条错误/警告消息。 没什么大不了的,但在我看来它有点奇怪(而且难看)

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


有什么办法可以改变这一点吗?我在Linux上使用的是
GCC4.4.7

可能是因为默认终端大小的历史宽度为80列,请参见问题

有鉴于此,GCC的行为默认情况下可以遵循以下规则:

-fmessage length=n

尝试格式化错误消息,使其适合大约n个字符的行默认值为72个字符(对于g++)和0(对于GCC支持的其他前端)。如果n为零,则不进行换行;每条错误消息显示在一行上


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

从GCC 4.5开始,第二条消息显示在单行上,并以“note”而不是“error”开头:

$cat test.c int main(){x=3;} $gcc-4.5.4-c测试c 测试c:在函数“main”中: test.c:1:14:错误:“x”未声明(首次在此函数中使用) test.c:1:14:注意:每个未声明的标识符对于它出现在其中的每个函数只报告一次
使用GCC4.4,我可以重现您看到的行为,这看起来确实像一个bug,没有任何方法可以解决它。如果可能,请升级您的编译器。

没有GCC 4.4.17,您是说4.4.7吗?存在错误消息行包装模式(
-fmessage length
),但默认情况下应禁用该模式。您将向GCC传递哪些选项?是的,我已修复了版本,谢谢。我正在运行一个普通的
gcc-Wall程序c
<代码>-fmessage length选项无效当前GCC在2015年12月底(和2016年初)。你真的应该升级你的(旧)编译器。而且当前版本对最新标准C++11、C++14、C11。。。改进诊断和优化;您甚至可以从其源代码编译GCC 5.3。@BasileStryneVitch 4.4.7是Centos-6中当前可用的版本。我也这么认为,但事实并非如此,GCC 4.4.7即使在
-fmessage length=0
的情况下也是这样包装的。对我来说没有任何影响(至少对该特定消息没有影响)。
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.)
$ 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