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;
}
4

2 回答 2

19

来自 C++ 标准:

(C++11, 2.2p1) “每个反斜杠字符 (\) 的实例紧跟换行符被删除,拼接物理源代码行以形成逻辑源代码行。只有任何物理源代码行上的最后一个反斜杠应有资格成为这种拼接的一部分。”

C 说的完全一样:

(C11,5.1.1.2 翻译阶段 p1)“每个反斜杠字符 (\) 的实例都被删除,紧跟一个换行符,将物理源代码行拼接成逻辑源代码行。”

所以:

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

实际上相当于:

if(x==y){
    cout<<"x=y"<<endl;
}
于 2012-10-15T20:16:45.037 回答
6

\转义换行符。将在一行上g++读取,这不是语法错误。if(x==y){

于 2012-10-15T20:16:36.347 回答