Exercice langage C: Déterminer les erreurs commises dans un programme

Quelles erreurs ont été commises dans chacun des groupes d'instructions suivants :

1)

if (a<b) printf ("ascendant")

else printf ("non ascendant") ;

2)

int n ;

...

switch (2*n+1)

{ case 1 : printf ("petit") ;

case n : printf ("moyen") ;

}

3)



#define LIMITE 100

int n ;

...

switch (n)

{ case LIMITE-1 : printf ("un peu moins") ;

case LIMITE : printf ("juste") ;

case LIMITE+1 : printf ("un peu plus") ;

}

4)



const int LIMITE=100

int n ;

1) Il manque un point-virgule à la fin du premier printf :

if (a<b) printf ("ascendant") ;

else printf ("non ascendant") ;

2) Les valeurs suivant le mot case doivent obligatoirement être des "expressions constantes", c'est-à-dire des expressions calculables par le compilateur lui-même. Ce n'est pas le cas de n.

3) Aucune erreur, les expressions telles que LIMITE-1 étant bien des expressions constantes.

4) Ici, les expressions suivant le mot case ne sont plus des expressions constantes, car le symbole LIMITE a été défini sous forme d'une "constante symbolique" (en C++, cependant, ces instructions seront correctes).