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++1行で読み取りますif(x==y){が、これは構文エラーではありません。

于 2012-10-15T20:16:36.347 に答える