Дополнительный символ обратной косой черты не влияет на мою программу. Зачем?

Этот код будет работать и нормально работать с 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 ответа

Решение

Из стандарта C++:

(C++ 11, 2.2p1) "Каждый экземпляр символа обратной косой черты (\), за которым сразу следует символ новой строки, удаляется, объединяя физические исходные строки для формирования логических исходных строк. Только последний обратный слеш в любой физической исходной строке должен иметь право быть частью такого соединения ".

С говорит точно так же:

(C11, 5.1.1.2 Фазы перевода p1) "Каждый экземпляр символа обратной косой черты (\), за которым сразу следует символ новой строки, удаляется, объединяя физические исходные строки для формирования логических исходных строк".

Так:

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

на самом деле эквивалентно:

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

\ ускользает от новой строки. g++ буду читать if(x==y){ на одной строке, что не является синтаксической ошибкой.

Другие вопросы по тегам