No son una sola palabra clave si vamos al borrador de la sección estándar de C ++. La tabla de 2.12
palabras clave4
enumera ambos if
y por else
separado y no hay una else if
palabra clave. Podemos encontrar una lista más accesible de palabras clave de C ++ yendo a la sección de referencias sobre palabras clave .
La gramática en la sección 6.4
también deja esto en claro:
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
El if
en else if
un comunicado tras el else
término. La sección también dice:
[...] La subenunciación en una instrucción de selección (cada subenunciación, en la
forma else de la instrucción if ) define implícitamente un alcance de bloque (3.3). Si la subenunciación en un enunciado de selección es un enunciado único y no un enunciado compuesto , es como si fuera reescrito para ser un enunciado compuesto que contiene el enunciado original.
y proporciona el siguiente ejemplo:
if (x)
int i;
can be equivalently rewritten as
if (x) {
int i;
}
Entonces, ¿cómo se analiza su ejemplo ligeramente extendido?
if
statement_0;
else
if
statement_1;
else
if
statement_2 ;
se analizará así:
if
{
statement_0;
}
else
{
if
{
statement_1;
}
else
{
if
{
statement_2 ;
}
}
}
Nota
También podemos determinar que else if
no puede ser una palabra clave al darnos cuenta de que las palabras clave son identificadores y podemos ver en la gramática de un identificador en mi respuesta a ¿Puede comenzar un nombre de clase con un dígito numérico? que los espacios no están permitidos en los identificadores y, por lo tanto else if
, no pueden ser una sola palabra clave sino dos palabras clave separadas .
else if