Je suis nouveau en C++. Je vois souvent une déclaration conditionnelle comme ci-dessous:
if
statement_0;
else if
statement_1;
Question:
Syntaxiquement, dois-je traiter else if
comme mot clé unique? Ou s'agit-il en fait d'une instruction if
imbriquée dans le else
externe comme ci-dessous?
if
statement_0;
else
if
statement_1;
Ils ne sont pas un seul mot-clé si nous allons à la section projet de norme C++2.12
Mots-clés table 4
répertorie à la fois if
et else
séparément et il n'y a pas de else if
mot-clé. Nous pouvons trouver une liste plus accessible de mots-clés C++ en allant à section cppreferences sur les mots-clés .
La grammaire dans la section 6.4
le montre aussi clairement:
selection-statement:
if ( condition ) statement
if ( condition ) statement else statement
Le if
dans else if
est une instruction suivant le terme else
. La section dit également:
[...] La sous-déclaration dans une instruction-sélection (chaque sous-déclaration, sous la forme sinon de l'instruction if ) définit implicitement une portée de bloc (3.3). Si la sous-instruction dans une instruction de sélection est une instruction unique et non une instruction composée , c'est comme si elle avait été réécrite pour être une instruction composée contenant la sous-instruction d'origine.
et fournit l'exemple suivant:
if (x)
int i;
can be equivalently rewritten as
if (x) {
int i;
}
Alors, comment votre exemple légèrement étendu est-il analysé?
if
statement_0;
else
if
statement_1;
else
if
statement_2 ;
sera analysé comme ceci:
if
{
statement_0;
}
else
{
if
{
statement_1;
}
else
{
if
{
statement_2 ;
}
}
}
Remarque
Nous pouvons également déterminer que else if
ne peut pas être un mot-clé en réalisant que les mots-clés sont des identifiants et nous pouvons voir dans la grammaire un identifiant dans ma réponse to Pouvez-vous commencer un nom de classe avec un chiffre numérique? que les espaces ne sont pas autorisés dans les identifiants et donc donc else if
ne peut pas être un seul mot clé mais doit être deux mots clés distincts .
Syntaxiquement, ce n'est pas un seul mot-clé; les mots clés ne peuvent pas contenir d'espace blanc. Logiquement, lors de l'écriture de listes de else if
, il vaut probablement mieux si vous le voyez comme un seul mot-clé, et écrivez:
if ( c1 ) {
// ...
} else if ( c2 ) {
// ...
} else if ( c3 ) {
// ...
} else if ( c4 ) {
// ...
} // ...
Le compilateur voit littéralement cela comme:
if ( c1 ) {
// ...
} else {
if ( c2 ) {
// ...
} else {
if ( c3 ) {
// ...
} else {
if ( c4 ) {
// ...
} // ...
}
}
}
mais les deux formes aboutissent à la même chose, et la première est beaucoup plus lisible.
Non, ça ne l'est pas.
Ce sont deux mots-clés et, de plus, le deuxième "si" est une sous-déclaration "à l'intérieur" de la portée déterminée par la première instruction "else".
Vous pouvez voir la portée en utilisant des accolades:
if(X) {
statement_0;
}
else {
if(Y) {
statement_1;
}
}
Et normalement implémenté avec deux mots-clés distincts, l'un est if et l'autre est else.
Comme déjà répondu, ce n'est pas le cas. Ce sont deux mots-clés. C'est le début de deux déclarations qui se succèdent. Pour essayer de le rendre un peu plus clair, voici la grammaire BNF qui traite les instructions if
et else
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
lui-même inclut selection-statement
. Ainsi, des combinaisons comme:
if (cond1)
stat
else if(cond2)
stat
else
stat
sont possibles et valides selon la norme/sémantique C++.
Remarque: la grammaire C++ provient de la page this .
else and if are two different C++ keywords . Une instruction if peut être suivie d'une option else if ... instruction else . Une instruction if peut avoir zéro ou plusieurs else if et doit précéder le sinon .
Vous pouvez trouver la syntaxe et l'exemple dans ce tutoriel if ... else