Encore une fois une erreur variable non initialisée stupide dans How to fix this segmentation error in a sequence inverting program?. Alors j'allais répéter le commentaire "veuillez utiliser -Wall
flags", mais quand j'ai testé le code contre les avertissements, je n'ai trouvé aucun avertissement signalé à ma grande surprise.pourquoi je ne reçois pas un avertissement "utilisé non initialisé" de gcc dans cet exemple trivial?
Je rognée vers le bas à ce ci-dessous (ce code n'a pas de sens à des fins d'exécution, mais il illustre ce que je veux montrer):
#include <stdio.h>
int main()
{
int i,len=12;
/* printf("%d\n",i); */
while(i!=len-1)
{
i++;
len--;
}
return 0;
}
lors de la compilation à l'aide gcc
4.7.3 et 6.2.1 en utilisant
gcc -Wall -Wextra -pedantic
Je reçois aucun avertissement, alors que i
est manifestement pas initialisés avant d'utiliser dans la boucle while
.
Maintenant, si je décommenter la déclaration printf
je reçois:
warning: 'i' is used uninitialized in this function [-Wuninitialized]
Alors pourquoi l'avertissement émis lors du passage i
-printf
mais pas dans le test while
?
(Il est différent de gcc failing to warn of uninitialized variable parce que, dans mon cas, il n'y a pas de branches)
(sons comme un bug, mais il est si trivial que je me demande si je ne manque pas quelque chose d'énorme.)
pourquoi ne pas attribuer i = 0? –
@ Dr.Geek avez-vous lu la question? – bolov
Obtenez-vous des résultats différents si vous forcez des versions spécifiques de la norme de langue via -std = ....? – SirDarius