Voici deux exemples de code bugués. Dans les deux cas, DevC++ ne me met aucun warning (je suis en mode -Wall -Wextra).
}
1.int x = 1;
{
int x = x + 1;
printf("%d\n", x);
Piège : on ne peut pas déclarer une nouvelle variable locale ayant le même nom qu'une variable globale, en utilisant une déclaration qui fait appel à cette variable globale. Pas de warning pour dire que la définition locale de x est invalide ou (au pire) que x est utilisé sans être initialisé.
}
2.int i;
for (i = 0; i < 2; i++)
{
int x;
if (i == 0) x = 1;
if (i == 1) printf("%d\n", x);
Piège : la durée de vie de x est limitée au parcours en cours de la boucle, donc rien ne garantit que x = 1 quand i = 1. Pas de warning non plus pour la non-initialisation de x dans ce cas.
Bon, je sais que la version de GCC utilisée dans DevC++ commence à dater.
Qu'est-ce-que ça donne avec votre compilo préféré (GCC plus récent, VC++, autre...) ?
Qu'en pensez-vous ? J'en demande trop au compilateur ?