铿锵行指令

时间:2015-07-10 23:56:34

标签: c++ gcc g++ clang clang++

我正在编写一个语法转换器,它输出C ++代码并遇到了一个有趣的问题。假设我有两个文件:ln.xln.cpp。在ln.x

abc

ln.cpp

#line 1 "ln.x"
(

当我尝试使用GCC编译它时,它会打印ln.x中的相应行:

ln.x:1:1: error: expected unqualified-id at end of input
 abc
 ^
ln.x:1:1: error: expected ‘)’ at end of inpu

然而,Clang只是打印相同文件的行:

ln.x:1:2: error: expected unqualified-id
(
 ^
ln.x:1:2: error: expected ')'
ln.x:1:1: note: to match this '('
(
^
2 errors generated.

有没有办法让Clang像GCC那样打印文件行?

2 个答案:

答案 0 :(得分:1)

这看起来更像是一个错误,而不是一个功能。你为什么要这样?

#line指定的文件打印只有在该行符合要解析的文本(字符符合字符)时才有效。如果文件首先存在。

我在GCC预处理器手册(GCC 4.9版)中没有看到任何相关内容。但是,有一个说明曾经(直到2001年),GCC会认为命名文件确实存在于本地,或者至少存在其父目录。这可能是一个保留错误。

而且,不,没有办法让Clang这样做。它没有尝试打开#line命名的文件的概念。

答案 1 :(得分:0)

所以,由于这似乎不可能,我写了Perl script to wrap Clang and rewrite the error lines。有点ha ,,但现在还不错。