2012-10-15 18 views
5

Mã này sẽ hoạt động và chạy tốt với g ++. Tôi không có lý do gì. Nó sẽ đưa ra một lỗi.Một dấu gạch chéo ngược phụ không ảnh hưởng đến chương trình của tôi. Tại sao?

#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

Tại sao bạn cảm thấy rằng nó nên thất bại trong việc biên dịch? –

Trả lời

19

Từ C++ Standard:

(C++ 11, 2.2p1) "Mỗi thể hiện của một nhân vật dấu chéo ngược (\) ngay lập tức theo sau là một nhân vật mới dòng bị xóa, dòng nối nguồn vật chất để hình thành các dòng nguồn logic. Chỉ có dấu gạch chéo ngược cuối cùng trên bất kỳ dòng nguồn vật lý nào đủ điều kiện để trở thành một phần của mối nối đó. "

C nói giống hệt nhau:

(C11, 5.1.1.2 giai đoạn Translatation P1) "Mỗi thể hiện của một nhân vật dấu chéo ngược (\) ngay lập tức theo sau là một nhân vật mới-line sẽ bị xóa, nối vật lý dòng nguồn để tạo thành các dòng nguồn logic. "

Vì vậy:

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

thực sự là tương đương với:

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

Tôi đã làm như sau – user1061392

+0

Tôi đã làm như sau: nếu (x == y) \ // đây là một số từ { cout << "x = y" << endl; } Tôi phải tương đương với số nếu (x == y) \ // đây là một số từ { cout << "x = y" << endl; } Nó vẫn hoạt động – user1061392

+0

@ user1061392 Bạn đang sử dụng trình biên dịch nào? g ++ [không biên dịch] (http://liveworkspace.org/code/e5c1e0259897a999853bc8e6c3302668) mã nếu bạn đặt nhận xét sau dấu gạch chéo ngược. – Praetorian

6

\ thoát khỏi dòng mới. g++ sẽ đọc if(x==y){ trên một dòng, đây không phải là lỗi cú pháp.