编译器的错误消息应如下所示:
sourcefile:lineno: message
如果您想提及列号,请使用以下格式之一:
sourcefile:lineno:column: message sourcefile:lineno.column: message
行号应从文件开头的 1 开始,列号应从行开头的 1 开始。(这两个约定都是为了兼容性而选择的。)计算列号时,假设空格和所有 ASCII 打印字符的宽度相等,并且制表符每 8 列停止一次。对于非 ASCII 字符,当使用 UTF-8 语言环境时,应使用 Unicode 字符宽度;GNU libc 和 GNU gnulib 提供了合适的 wcwidth
函数。
错误消息还可以给出错误文本的起始和结束位置。有几种格式,以便您可以避免重复的信息,例如重复的行号。以下是可能的格式:
sourcefile:line1.column1-line2.column2: message sourcefile:line1.column1-column2: message sourcefile:line1-line2: message
当错误跨越多个文件时,您可以使用以下格式:
file1:line1.column1-file2:line2.column2: message
来自其他非交互式程序的错误消息应如下所示:
program:sourcefile:lineno: message
当存在合适的源文件时,或者如下所示:
program: message
当没有相关的源文件时。
如果您想提及列号,请使用以下格式:
program:sourcefile:lineno:column: message
在交互式程序(从终端读取命令的程序)中,最好不要在错误消息中包含程序名称。指示哪个程序正在运行的位置应该在提示符或屏幕布局中。(当同一个程序从终端以外的源读取输入时,它不是交互式的,最好使用非交互式样式打印错误消息。)
当字符串 message 跟在程序名称和/或文件名之后时,它不应该以大写字母开头,因为那不是句子的开头。(从概念上讲,句子从行首开始。)此外,它不应该以句点结尾。
来自交互式程序的错误消息以及其他消息(例如使用消息)应该以大写字母开头。但是它们不应该以句点结尾。