99 votes

Est « else if » un seul mot clé ?

Je suis nouveau sur C++. Je vois souvent des instruction conditionnelle comme ci-dessous :

Question :

Syntaxiquement, je vais traiter comme un seul mot clé ? Ou est-ce réellement une imbriquée énoncé dans l’outer `` comme ci-dessous ?

133voto

Shafik Yaghmour Points 42198

Ils ne sont pas un seul mot-clé si nous allons au projet de norme C++ section 2.12 mots-clés table, 4 listes deux if et else séparément et il n'y a pas d' else if mot-clé. On peut trouver une liste accessible de C++ mots-clés en allant à cppreferences section sur les mots clés.

La grammaire dans la section 6.4 également est clair à ce sujet:

selection-statement:
 if ( condition ) statement
 if ( condition ) statement else statement

L' if en else if est une déclaration à la suite de la else terme. L'article dit aussi:

[...]Le substatement dans une sélection-déclaration (chaque substatement, dans le autre forme de la si la déclaration) implicitement définit un bloc de portée (3.3). Si le substatement dans une sélection instruction est une instruction unique et pas un composé de déclaration, c'est comme si il a été réécrit pour être un composé déclaration contenant l'original substatement.

et donne l'exemple suivant:

if (x)
 int i;

can be equivalently rewritten as

if (x) {  
  int i;
}

Alors, comment est votre légèrement exemple analysé?

if 
  statement_0;
else 
  if
    statement_1;
  else
    if
      statement_2 ;

seront analysés comme ceci:

if 
{
  statement_0;
}
else
{ 
    if
    {
      statement_1;
    }
    else
    {
        if
        {
         statement_2 ;
        }
    }
}

Note

Nous pouvons aussi déterminer l' else if ne peut pas être un mot-clé en se rendant compte que les mots clés sont des identifiants et nous pouvons voir à partir de la grammaire pour un identificateur dans ma réponse à Pouvez-vous commencer un nom de classe avec un chiffre? que les espaces ne sont pas autorisés dans les identificateurs et donc, par conséquent, else if ne peut pas être un seul mot-clé , mais doivent être deux mots-clés.

78voto

James Kanze Points 96599

D’un point de vue syntaxique, il n’est pas un seul mot clé ; Mots-clés ne peut pas contenir d’espace blanc. Logiquement, quelle écriture listes de `` , c’est probablement mieux si vous considèrent comme un seul mot clé et d’écrire :

Le compilateur a littéralement voit cela comme :

mais les deux formes sortent à la même chose, et le premier est beaucoup plus lisible.

24voto

pablo1977 Points 2207

Non, il n’est pas.
Ils sont deux mots clés et, en outre, le deuxième « si » est un substatement « à l’intérieur » le champ d’application défini par la première instruction « else ».

16voto

reindeer Points 1344

Vous pouvez voir la portée en utilisant des accolades :

Et normalement mis en place avec deux mots clés distincts, l’un est si et on est autre chose.

10voto

The Mask Points 5925

Comme déjà répondu, il n'est pas. Ils sont deux mots-clés. Le début de deux états l'un à la suite de chaque un d'autres. Pour essayer de le rendre un peu plus clair, voici la BNF grammar rencontrent qui traitent if et else des énoncés en langage C++.

 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

Notez que statement se comprennent selection-statement. Ainsi, des combinaisons telles que:

if (cond1)
   stat
else if(cond2)
   stat
else
   stat

sont possible et valide selon la norme C++/sémantique.

Remarque: C++ grammaire prendre à partir de cette page.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X