我正在编写一个语法转换器,它输出C ++代码并遇到了一个有趣的问题。假设我有两个文件:ln.x
和ln.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那样打印文件行?
答案 0 :(得分:1)
这看起来更像是一个错误,而不是一个功能。你为什么要这样?
从#line
指定的文件打印只有在该行符合要解析的文本(字符符合字符)时才有效。如果文件首先存在。
我在GCC预处理器手册(GCC 4.9版)中没有看到任何相关内容。但是,有一个说明曾经(直到2001年),GCC会认为命名文件确实存在于本地,或者至少存在其父目录。这可能是一个保留错误。
而且,不,没有办法让Clang这样做。它没有尝试打开#line
命名的文件的概念。
答案 1 :(得分:0)
所以,由于这似乎不可能,我写了Perl script to wrap Clang and rewrite the error lines。有点ha ,,但现在还不错。