kir*_*sos 5 c++ gcc g++ clang clang++
我正在编写一个输出 C++ 代码的语法翻译器,但遇到了一个有趣的问题。假设我有两个文件:ln.x和ln.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 一样打印文件的行?
这看起来更像是一个错误而不是一个功能。你为什么需要它?
\n\n#line仅当该行与正在解析的文本逐个字符匹配时,才可以从指定的文件进行打印。如果该文件首先存在。
我在 GCC 预处理器手册(GCC 4.9 版)中没有看到有关此内容的任何内容。然而,需要注意的是,从前(直到 2001 年),GCC 会假设指定的文件确实存在于本地,或者至少其父目录存在。这可能是一个遗留错误。
\n\n而且,不,没有办法让 Clang 这样做。它没有尝试打开名为 的文件的概念#line。