2012-10-15 20 views
5

Ten kod zadziała i będzie działać poprawnie z g ++. Nie mam po co. Powinien dać błąd.Dodatkowy znak ukośnika odwrotnego nie ma wpływu na mój program. Czemu?

#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

Dlaczego czujesz, że powinien nie skompilować? –

Odpowiedz

19

Z C++ Standard:

(C++ 11, 2.2p1) „Każde wystąpienie znaku backslash (\), po czym natychmiast znak nowej linii zostanie usunięta, linie forniru fizyczny źródłowego do tworzą logiczne linie źródłowe, tylko ostatni odwrotny ukośnik na dowolnej fizycznej linii źródłowej kwalifikuje się do bycia częścią takiego splotu. "

C mówi dokładnie to samo:

(C11, 5.1.1.2 fazy Translatation P1) „Każde wystąpienie znaku backslash (\), po czym natychmiast znak nowej linii zostanie usunięty, spawy fizyczne linie źródłowe tworzą logiczne linie źródłowe. "

Więc:

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

jest rzeczywiście równoważne:

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

Zrobiłem następujące: – user1061392

+0

Zrobiłem: jeśli (x == y) \ // to jest kilka słów { cout << "x = y" << endl; } } Powinienem być równoważny temu jeśli (x == y) \ // to jest kilka słów { cout << "x = y" << endl; } To wciąż działa – user1061392

+0

@ user1061392 Jakiego kompilatora używasz? g ++ [nie kompiluje] (http://liveworkspace.org/code/e5c1e0259897a999853bc8e6c3302668) kodu, jeśli umieścisz komentarz po odwrotnym ukośniku. – Praetorian

6

\ wymyka się nowej linii. g++ odczyta if(x==y){ w jednej linii, co nie jest błędem składni.