Дополнительный символ обратной косой черты не влияет на мою программу. Зачем?
Этот код будет работать и нормально работать с 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){
на одной строке, что не является синтаксической ошибкой.