Eu sou novo em C ++. Costumo ver declarações condicionais como abaixo:
if
statement_0;
else if
statement_1;
Questão:
Sintaticamente , devo tratar else if
como uma única palavra-chave? Ou é realmente uma if
declaração aninhada dentro do exterior else
como abaixo?
if
statement_0;
else
if
statement_1;
c++
syntax
language-lawyer
modelador
fonte
fonte
else if
elseif
eELIF
. Na verdade, apenas (?) A linguagem de programação Algol68 permite um espaço em um identificador; legal também:PROC walk through tree ()
elseif
palavra-chave existe em VB e PHP.long double
você tem que escrever dessa forma.longdouble
está incorreto.Respostas:
Eles não são uma única palavra-chave se formos para o rascunho da seção padrão C ++. A tabela de
2.12
palavras-chave4
lista ambasif
eelse
separadamente e não háelse if
palavra-chave. Podemos encontrar uma lista mais acessível de palavras-chave C ++ acessando a seção cppreferences sobre palavras-chave .A gramática na seção
6.4
também deixa isso claro:O
if
inelse if
é uma declaração após oelse
termo. A seção também diz:e fornece o seguinte exemplo:
Então, como seu exemplo ligeiramente estendido é analisado?
será analisado assim:
Nota
Também podemos determinar que
else if
não pode ser uma palavra-chave percebendo que palavras-chave são identificadores e podemos ver a gramática de um identificador em minha resposta a Você pode iniciar o nome de uma classe com um dígito numérico? que espaços não são permitidos em identificadores e, portanto,else if
não podem ser uma única palavra-chave, mas devem ser duas palavras-chave separadas .fonte
jeq
(if
|else if
),jne
(if
|else if
),jmp
(else
). Com base nisso, eu diria que era uma única palavra-chave ... provavelmente não sintaticamente, mas em termos de instrução.else if
, mas simelsif
. Nessas línguas,else if
é realmente uma palavra-chave. No entanto, as linguagens baseadas em C geralmente não, como afirma esta resposta.else
declaração final . Eu apreciaria isso também.Sintaticamente, não é uma única palavra-chave; palavras-chave não podem conter espaços em branco. Logicamente, ao escrever listas de
else if
, provavelmente é melhor se você vê-lo como uma única palavra-chave e escrever:O compilador literalmente vê isso como:
mas ambas as formas resultam na mesma coisa, e a primeira é muito mais legível.
fonte
else
seguido por acompound-statement
. Depois de umelse
, procurestatement
(que pode ser comoreturn;
ouf()
) ou umcompound-statement
...Não não é.
Eles são duas palavras-chave e, além disso, o segundo "if" é uma sub-declaração "dentro" do escopo determinado pela primeira declaração "else".
fonte
Você pode ver o escopo usando chaves:
E normalmente implementado com duas palavras-chave distintas, uma é if e a outra é else .
fonte
if-statement
termina com um opcionalelse-clause
. Umelse-clause
é tantoelse code-block
ouelse if-statement
.code-block
inclui chaves obrigatórias. Portanto, aelse
palavra - chave só pode ser seguida por{
ouif
.else { if ... }
".Como já respondi, não é. São duas palavras-chave. É o início de duas declarações, uma após a outra. Para tentar tornar isso um pouco mais claro, aqui está o gramar BNF que trata das instruções
if
eelse
na linguagem C ++.Observe que
statement
se incluiselection-statement
. Então, combinações como:são possíveis e válidos de acordo com o padrão / semântica C ++.
Nota: gramática C ++ extraída desta página.
fonte
else e if são duas palavras-chave C ++ diferentes . Uma instrução if pode ser seguida por uma instrução else if ... else opcional . Uma instrução if pode ter zero ou mais else if 's e eles devem vir antes do else .
Você pode encontrar sintaxe e exemplo neste tutorial de instrução if ... else
fonte
Gostaria apenas de acrescentar meu ponto de vista a todas essas explicações. A meu ver, se você pode usar essas palavras-chave separadamente, elas devem ser DUAS palavras-chave. Talvez você possa dar uma olhada na gramática C ++, a partir deste link em stackoverflow: Existe uma gramática C ++ padrão?
Saudações
fonte
Uma instrução if pode ser seguida por uma instrução else if ... else opcional, que é muito útil para testar várias condições usando uma instrução if ... else if única.
Ao usar as instruções if, else if, else, há alguns pontos a serem considerados.
dê uma olhada no tutorial de instrução if ... else .
fonte
else if
como se fosse uma palavra-chave, então não há sentido em defini-la explicitamente.