2012-10-15 61 views
5

這段代碼可以在g ++中正常工作和運行。 我不爲什麼。它應該給出一個錯誤。額外的反斜槓字符不影響我的程序。爲什麼?

#include <iostream> 
using namespace std; 
int main(){ 
    int x=9; 
    int y=6; 
    //note that there is extra backslash in the end of if statement 
    if(x==y)\ 
    { 
     cout<<"x=y"<<endl; 
    } 
    //note that there is extra backslash in the end of if statement 
    if(x!=y)\ 
    { 
     cout<<"x!=y"<<endl; 
    } 
    return 0; 
} 
+2

爲什麼你認爲它應該編譯失敗? –

回答

19

從C++標準:

(C++ 11,2.2p1)「反斜線字符(\)緊跟一個新行字符中的每一個實例被刪除,拼接物理源極線到形成邏輯源代碼行,只有任何物理源代碼行中的最後一個反斜槓纔有資格成爲這種拼接的一部分。「

Ç說如出一轍:

(C11,5.1.1.2 Translatation階段P1)「反斜線(\)後面緊跟一個換行符的每個實例被刪除,拼接物理 源代碼行來形成邏輯源代碼行。「

所以:

if(x==y)\ 
{ 
    cout<<"x=y"<<endl; 
} 

實際上等同於:

if(x==y){ 
    cout<<"x=y"<<endl; 
} 
+0

我做了以下 – user1061392

+0

我做了以下操作: if(x == y)\ //這是一些單詞 { cout <<「x = y」<< endl; } 我應該等於這個 if(x == y)\ //這是一些單詞{「x = y」<< endl; } 它仍然是工作 – user1061392

+0

@ user1061392你使用什麼編譯器? g ++ [不編譯](http://liveworkspace.org/code/e5c1e0259897a999853bc8e6c3302668)代碼如果你在反斜槓後面加註釋。 – Praetorian

6

\轉義換行符。 g++將在一行上讀取if(x==y){,這不是語法錯誤。

相關問題