J'essaie actuellement de comprendre dans quels cas G ++ avertit des variables non initialisées. Considérez la pièce de code suivante: si je le compile comme ça, je ne reçois aucun avertissement: p> mais si je change de bartype en int: p> Comment l'avertissement dépend-il du type? Il est ininitialisé dans les deux cas. P> J'utilise: p> merci, p> Quelqu'un p> p>
4 Réponses :
À une supposition, ils pourraient être plus préoccupés par des types intégraux utilisés de manière ininitialisée que de dire un flotteur ou un double puisque vous pouvez utiliser des types intégrés avec des compensations de pointeur sans coulée qui pourrait être très mauvaise (TM) P>
Les flotteurs non initiés sont aussi mauvais que l'INTS. C'est une décision de tête osseuse si elle a été prise consciemment. Bien sûr, il peut y avoir une autre explication.
Donnée de la remarque de David ici, même si le pire qui se produit est une séquence aléatoire de bits utilisés comme un double, que la séquence de bits peut parfois représenter une infini ou une nan avec toutes sortes de conséquences drôles, une fois-toutes les 50000-exécutions .
La norme C ++ ne nécessite rien de ce genre ici. Donc, les compilateurs sont libres de faire tout ce qu'ils aiment. P>
Voir encore une autre bonne observation ici: P>
amusant avec des variables et un compilateur non assemblées (GCC) p>
C'est un comportement indéfini, qui n'est pas nécessaire à être diagnostiqué, le compilateur est donc libre de faire son jugement. Ils auraient pu mieux faire. P>
Vous pouvez obtenir ceci pour avertir si vous compilez avec -o. Je ne suis pas vraiment clair sur pourquoi, mais si je devais le deviner, c'est à des fins de la compilation, c'est-à-dire qu'il est déjà nécessaire de comprendre cela pour l'optimisation afin de ne signaler que si vous souhaitez optimiser.
Il y a aussi de la confiance, qui n'est en fait pas inclus dans "tous", mais que cela nécessite également -o de toute façon. Au moins si vous faites -wuninitialisé, le compilateur vous avertira qu'elle ne peut pas vous avertir ... p>
p>
cc1plus: warning: -Wuninitialized is not supported without -O