2012-10-15 5 views
5

Dieser Code funktioniert und läuft gut mit g ++. Ich weiß nicht warum. Es sollte einen Fehler geben.Ein zusätzlicher umgekehrter Schrägstrich beeinflusst mein Programm nicht. Warum?

#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

Warum Sie nicht das Gefühl, dass es sollte nicht kompilieren? –

Antwort

19

Aus dem C++ Standard:

(C++ 11, 2.2p1) „Jede Instanz einer umgekehrten Schrägstrich-Zeichen (\) sofort durch eine neue Zeilenwechselzeichen gefolgt wird gelöscht, Splicing physikalische Quellenleitungen zu Bilden Sie logische Quellzeilen. Nur der letzte Backslash einer physischen Quellzeile darf als Teil eines solchen Spleißes verwendet werden. "

C sagt genau die gleiche:

(C11, 5.1.1.2 Translatation Phasen P1) „jede Instanz eines umgekehrten Schrägstrich-Zeichen (\) sofort durch eine neue Zeilen Zeichen folgt gelöscht wird, Splicing Physikalische Quellzeilen, um logische Quellzeilen zu bilden. "

So:

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

ist eigentlich äquivalent zu:

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

Ich tat folgendes – user1061392

+0

Ich tat folgendes: if (x == y) \ // das sind einige Wörter { cout << "x = y" << endl; } Ich sollte diesem entsprechen if (x == y) \ // das sind einige Wörter { cout << "x = y" << endl; } Es ist immer noch Arbeit – user1061392

+0

@ user1061392 Welche Compiler verwenden Sie? g ++ [kompiliert nicht] (http://liveworkspace.org/code/e5c1e0259897a999853bc8e6c3302668) der Code, wenn Sie nach dem Backslash einen Kommentar eingeben. – Praetorian

6

\ entkommt der Newline. g++ wird in einer Zeile if(x==y){ lesen, was kein Syntaxfehler ist.

Verwandte Themen