2010-08-02 3 views
2

다음 C++ 예제 (의도하지 않은 들여 쓰기)가 있습니다.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을 의미하고 이에 대한 규칙은 무엇인가? (네, { }을 사용하면이 문제를 해결할 수 있습니다).

+1

당신은 매달려있는 다른 문제를 발견했습니다. http://en.wikipedia.org/wiki/Dangling_else – riwalk

+0

너무 많은 정답과 받아 들여질 수있는 유일한 대답 – Dani

+1

원저자와 중괄호와 들여 쓰기를 알아보십시오. – dreamlax

답변

1

DeadMG가 맞습니다. 당신이 관심이 그냥 경우, 규칙은

elseif (다른 대응없이 즉, 보호되지 않은 중괄호와 ) 마지막 무료 에 연결되어 있습니다.

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(); 
3

else은 항상 가능한 가장 안쪽 if을 의미합니다.

그래서

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

적 생산 환경에서이 같은 코드를 작성하지 마십시오

if (a) { 
    if (b) B; 
    else C; 
} 
1

에 해당합니다. 그것은 당신을 물 것입니다.

+0

그것은 언어 문제를 분석 할 때 더 많은 이론적 인 문제와 매우 실용적인 문제인 것처럼 보입니다. – riwalk

+0

그것은 나를 조금 해 봤지만 코드를 작성하지 않았고 wtf를 알아야했습니다. – Dani

+0

@ Stargazer : 맞습니다. 프로그래밍 언어를 작성하는 사람들에게만 적합합니다. 우리 중 아주 소수입니다. @Dani : 오우, 그 코드를 유지해야만해서 죄송합니다. 내 애도. :) –

0

"댕글 링 else"문제입니다. 이를 해결하기위한 규약은 가장 가까운 'if'문에 'else'를 첨부하는 것입니다.

Dangling else wikipedia

+0

컨벤션은 * 매달려있는 다른 문제를 해결합니다. –

+0

편집되었으므로 다른 의미는 아닙니다. – Jaime

0

C++는 다른 알고 일치하는 그런 종류이 밖으로 플래시 단지 미세 파서이있는 경우, 및 C++ 컴파일러. 문제는 입니다.은 좋지 않습니다.

C++ prettyprinter을 통해이를 실행하면 결과 서식이 지정된 텍스트로 매우 명확 해집니다.