저는 C ++를 처음 사용합니다. 나는 종종 아래와 같은 조건문을 본다.
if
statement_0;
else if
statement_1;
질문:
구문 적else if
으로는 단일 키워드로 취급해야 합니까? 아니면 실제로 if
외부else
아래와 같이 입니까?
if
statement_0;
else
if
statement_1;
답변
우리가에 가면 그들은 하나의 키워드 아닌 초안 C ++ 표준 섹션 2.12
키워드 테이블 4
목록을 모두 if
와 else
별도로 더이없는 else if
키워드가. 키워드 에 대한 cppreferences 섹션으로 이동하여 더 접근하기 쉬운 C ++ 키워드 목록을 찾을 수 있습니다. .
섹션의 문법 6.4
은이를 명확하게합니다.
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
if
의는 else if
A는 문 다음 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 ++ 언어로 if
및 else
명령문 을 다루는 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 ++ 문법은 이 페이지 에서 가져옵니다 .
답변
else 및 if 는 두 개의 다른 C ++ 키워드 입니다. 경우 문이 옵션 다음에 할 수 있습니다 다른 경우 … 다른 문. 경우 문은 0 개 이상있을 수 있습니다 다른 경우 의 그리고 그들은 앞에 와야합니다 다른 .
이 if … else 문 자습서 에서 구문과 예제를 찾을 수 있습니다.
답변
이 모든 설명에 내 관점을 추가하고 싶습니다. 보시다시피이 키워드를 따로 사용할 수 있다면 두 개의 키워드 여야합니다. stackoverflow의이 링크에서 C ++ 문법을 살펴볼 수 있습니다
. 표준 C ++ 문법이 있습니까?
문안 인사