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 ambas if
e else
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:
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
O if
in else if
é uma declaração após o else
termo. A seção também diz:
[...] A subinstrução em uma instrução de seleção (cada subinstrução, na
forma else da instrução if ) define implicitamente um escopo de bloco (3.3). Se a subinstrução em uma instrução de seleção for uma instrução única e não uma instrução composta , é como se ela tivesse sido reescrita para ser uma instrução composta contendo a subexposição original.
e fornece o seguinte exemplo:
if (x)
int i;
can be equivalently rewritten as
if (x) {
int i;
}
Então, como seu exemplo ligeiramente estendido é analisado?
if
statement_0;
else
if
statement_1;
else
if
statement_2 ;
será analisado assim:
if
{
statement_0;
}
else
{
if
{
statement_1;
}
else
{
if
{
statement_2 ;
}
}
}
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 .
else if