2

次の C++ の例では (インデントは意図的に省略されています)。

if(condA)          // if #1
if(condB)          // if #2
if(condC)          // if #3
if(condD)          // if #4
funcA();
else if(condD)     // else #1 if #5
funcB();
else if(condE)     // else #2 if #6
funcC();
else               // else #3
funcD();
else if(condF)     // else #4 if #7
funcE();
else               // else #5
funcF();

elseが何を指し、ifこれについてのルールは何ですか? (はい、使用{ }するとこれが解決することはわかっています)。

4

6 に答える 6

5
if(condA)          // if #1
    if(condB)          // if #2
        if(condC)          // if #3
            if(condD)          // if #4
                funcA();
            else if(condD)     // else #1 if #5
                funcB();
            else if(condE)     // else #2 if #6
                funcC();
            else               // else #3
                funcD();
        else if(condF)     // else #4 if #7
            funcE();
        else               // else #5
            funcF();
于 2010-08-02T22:32:29.280 に答える
3

それぞれelseは常に可能な限り最も内側を参照しifます。

そう

if (a)
if (b) B;
else C;

と同等です

if (a) {
  if (b) B;
  else C;
}
于 2010-08-02T22:33:20.713 に答える
1

本番環境でこのようなコードを書かないでください。それはあなたをかみます。

于 2010-08-02T22:34:15.020 に答える
1

DeadMGは正しいです。念のために言っておきますが、ルールは

elseは最後の free に付けられます (つまり、中かっこで保護されておらず、対応する else もありません) if

于 2010-08-02T22:35:42.173 に答える
0

これは「Dangling else」問題と呼ばれます。これを解決するための規則は、'else' を最も近い 'if' ステートメントに付けることです。

他にぶら下がっているウィキペディア

于 2010-08-02T22:38:48.147 に答える
0

C++ は、どの else がどの if に一致するかを認識しており、C++ コンパイラには、これをフラッシュで分類する適切なパーサーがあります。問題は、あなたがこれが苦手だということです。

これをC++ の prettyprinterで実行すると、結果の書式設定されたテキストが非常に明確になります。

于 2010-12-20T11:49:39.713 に答える