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 ify por elseseparado y no hay una else ifpalabra 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.4también deja esto en claro:
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
El ifen else ifun comunicado tras el elseté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 ifno 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