2015-07-10 122 views
1

我正在寫一個輸出C++代碼的語法翻譯器,並遇到了一個有趣的問題。假設我有兩個文件:ln.xln.cpp。在ln.xClang行指令

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 

然而,鏘簡單地打印同一個文件的行:

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這樣的文件?

+1

這沒有多大意義。據我所知,編譯器完全有理由抱怨,因爲只包含一個左括號的文件不是有效的C++。 – celticminstrel

+0

你希望實現什麼?這不是C++代碼,那麼「解決這個問題」是什麼意思? –

+0

@DrewDormann我澄清了我的問題。 – refi64

回答

1

這看起來更像是一個bug而不是一個功能。你爲什麼需要它?

#line提名的文件中打印時,只要行符合得到解析的文本,字符爲字符,就可以使用。如果文件首先存在。

我在GCC預處理器手冊(GCC 4.9版)中沒有看到任何關於此的信息。然而,從前(從2001年開始),GCC會認爲指定的文件確實存在於本地,或者至少存在其父目錄。這可能是一個保留錯誤。

而且,不,沒有辦法讓Clang做到這一點。它沒有試圖打開由#line命名的文件的概念。