Clang 行指令

kir*_*sos 5 c++ gcc g++ clang clang++

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

abc
Run Code Online (Sandbox Code Playgroud)

ln.cpp

#line 1 "ln.x"
(
Run Code Online (Sandbox Code Playgroud)

当我尝试使用 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
Run Code Online (Sandbox Code Playgroud)

但是,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.
Run Code Online (Sandbox Code Playgroud)

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

Pot*_*ter 1

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

\n\n

#line仅当该行与正在解析的文本逐个字符匹配时,才可以从指定的文件进行打印。如果该文件首先存在。

\n\n

我在 GCC 预处理器手册(GCC 4.9 版)中没有看到有关此内容的任何内容。然而,需要注意的是,从前(直到 2001 年),GCC 会假设指定的文件确实存在于本地,或者至少其父目录存在。这可能是一个遗留错误。

\n\n

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

\n