2012-10-15 18 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

तुम क्यों महसूस करते हैं कि यह संकलन करने में विफल करना चाहिए:

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

वास्तव में के बराबर है? –

उत्तर

19

सी ++ स्टैंडर्ड से:

(सी ++ 11, 2.2p1) "बैकस्लैश चरित्र (\) तुरंत एक नया ऑनलाइन चरित्र के बाद से प्रत्येक उदाहरण हटा दी जाती है, स्प्लिसिंग शारीरिक स्रोत के लिए लाइनों तार्किक स्रोत लाइनों का निर्माण करें। किसी भी भौतिक स्रोत रेखा पर केवल अंतिम बैकस्लैश इस तरह के एक विभाजन के हिस्से के लिए पात्र होगा। "

सी कहते हैं ठीक उसी:

(सी 11, 5.1.1.2 Translatation चरणों P1) "बैकस्लैश चरित्र (\) तुरंत एक नया ऑनलाइन चरित्र के बाद से प्रत्येक उदाहरण हटा दी जाती है, स्प्लिसिंग लॉजिकल स्रोत लाइन बनाने के लिए भौतिक स्रोत रेखाएं। "

तो:

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

मैंने निम्नलिखित – user1061392

+0

किया है मैंने निम्नलिखित किया: यदि (x == y) \ // यह कुछ शब्द { cout << "x = y" << endl; } मुझे इस के बराबर होना चाहिए यदि (x == y) \ // यह कुछ शब्द { cout << "x = y" << endl; } यह अभी भी काम कर रहा है – user1061392

+0

@ user1061392 आप किस कंपाइलर का उपयोग कर रहे हैं? g ++ [संकलित नहीं करता है] (http://liveworkspace.org/code/e5c1e0259897a999853bc8e6c3302668) यदि कोड बैकस्लैश के बाद कोई टिप्पणी डालता है तो कोड। – Praetorian

6

\ नई लाइन से बच निकला। g++ एक पंक्ति पर if(x==y){ पढ़ेगा, जो एक वाक्यविन्यास त्रुटि नहीं है।