[c++] “else if”는 단일 키워드입니까?

저는 C ++를 처음 사용합니다. 나는 종종 아래와 같은 조건문을 본다.

if
  statement_0;
else if
  statement_1;

질문:

구문 적else if 으로는 단일 키워드로 취급해야 합니까? 아니면 실제로 if외부else 아래와 같이 입니까?

if
  statement_0;
else
  if
    statement_1;



답변

우리가에 가면 그들은 하나의 키워드 아닌 초안 C ++ 표준 섹션 2.12 키워드 테이블 4목록을 모두 ifelse별도로 더이없는 else if키워드가. 키워드 에 대한 cppreferences 섹션으로 이동하여 더 접근하기 쉬운 C ++ 키워드 목록을 찾을 수 있습니다. .

섹션의 문법 6.4은이를 명확하게합니다.

selection-statement:
 if ( condition ) statement
 if ( condition ) statement else statement

if의는 else ifA는 다음 else용어. 이 섹션은 또한 다음과 같이 말합니다.

[…] 선택 문의 하위 ( if 문의 else 형식의 각 하위
문)은 암시 적으로 블록 범위 (3.3)를 정의합니다. selection-statement의 하위 문이 복합 문이 아닌 단일 문 이면 원래 하위 문을 포함하는 복합 문으로 다시 작성된 것과 같습니다.

다음 예제를 제공합니다.

if (x)
 int i;

can be equivalently rewritten as

if (x) {
  int i;
}

그렇다면 약간 확장 된 예제는 어떻게 구문 분석됩니까?

if
  statement_0;
else
  if
    statement_1;
  else
    if
      statement_2 ;

다음과 같이 구문 분석됩니다.

if
{
  statement_0;
}
else
{
    if
    {
      statement_1;
    }
    else
    {
        if
        {
         statement_2 ;
        }
    }
}

노트

우리는 또한 결정할 수 else if실현에 의해 하나 개의 키워드가 될 수없는 키워드가 있습니다 식별자 우리는 내 대답 식별자의 문법에서 볼 수있는 당신이 숫자 숫자로 클래스 이름을 시작할 수 있습니까? 공간이 허용되지 않습니다 식별자 너무 그러므로과 else if하나가 될 수 없습니다 키워드 하지만 두 개의 별도해야합니다 키워드 .


답변

구문 적으로는 단일 키워드가 아닙니다. 키워드는 공백을 포함 할 수 없습니다. 목록을 작성할 때 논리적으로, else
if
경우에, 아마 더 나은 당신이 하나의 키워드 및 쓰기로 참조 :

if ( c1 ) {
    //  ...
} else if ( c2 ) {
    //  ...
} else if ( c3 ) {
    //  ...
} else if ( c4 ) {
    //  ...
} // ...

컴파일러는 말 그대로 이것을 다음과 같이 봅니다.

if ( c1 ) {
    //  ...
} else {
    if ( c2 ) {
        //  ...
    } else {
        if ( c3 ) {
            //  ...
        } else {
            if ( c4 ) {
                //  ...
            } // ...
        }
    }
}

그러나 두 형식 모두 같은 결과를 내고 첫 번째 형식은 훨씬 더 읽기 쉽습니다.


답변

전혀 그렇지 않다.
두 개의 키워드이며 두 번째 “if”는 첫 번째 “else”문에 의해 결정된 범위 “내부”하위 문입니다.


답변

중괄호를 사용하여 범위를 볼 수 있습니다.

if(X) {
  statement_0;
}
else {
  if(Y) {
    statement_1;
  }
}

그리고 일반적으로 두 개의 별개 키워드로 구현됩니다. 하나는 if 이고 다른 하나는 else 입니다.


답변

이미 대답했듯이 그렇지 않습니다. 두 가지 키워드입니다. 서로 뒤 따르는 두 문장의 시작입니다. 좀 더 명확하게하기 위해 C ++ 언어로 ifelse명령문 을 다루는 BNF gramar가 있습니다.

 statement:
    labeled-statement
    attribute-specifier-seqopt expression-statement
    attribute-specifier-seqopt compound-statement
    attribute-specifier-seqopt selection-statement
    attribute-specifier-seqopt iteration-statement
    attribute-specifier-seqopt jump-statement
    declaration-statement
    attribute-specifier-seqopt try-block

   selection-statement:
         if ( condition ) statement
     if ( condition ) statement else statement

참고 statement자체가 포함 selection-statement. 따라서 다음과 같은 조합 :

if (cond1)
   stat
else if(cond2)
   stat
else
   stat

C ++ 표준 / 의미에 따라 가능하고 유효합니다.

참고 : C ++ 문법은 페이지 에서 가져옵니다 .


답변

elseif 는 두 개의 다른 C ++ 키워드 입니다. 경우 문이 옵션 다음에 할 수 있습니다 다른 경우다른 문. 경우 문은 0 개 이상있을 수 있습니다 다른 경우 의 그리고 그들은 앞에 와야합니다 다른 .

if … else 문 자습서 에서 구문과 예제를 찾을 수 있습니다.


답변

이 모든 설명에 내 관점을 추가하고 싶습니다. 보시다시피이 키워드를 따로 사용할 수 있다면 두 개의 키워드 여야합니다. stackoverflow의이 링크에서 C ++ 문법을 살펴볼 수 있습니다
. 표준 C ++ 문법이 있습니까?

문안 인사