12
votes

Pourquoi G ++ avertissement de la variable non initialisée dépend-il du type de variable? (Il avertit un int mais pas pour un double)

J'essaie actuellement de comprendre dans quels cas G ++ avertit des variables non initialisées. Considérez la pièce de code suivante: xxx

si je le compile comme ça, je ne reçois aucun avertissement: xxx

mais si je change de bartype en int: xxx

Comment l'avertissement dépend-il du type? Il est ininitialisé dans les deux cas.

J'utilise: xxx

merci,

Quelqu'un


0 commentaires

4 Réponses :


1
votes

À 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)


2 commentaires

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 .



0
votes

La norme C ++ ne nécessite rien de ce genre ici. Donc, les compilateurs sont libres de faire tout ce qu'ils aiment.

Voir encore une autre bonne observation ici:

amusant avec des variables et un compilateur non assemblées (GCC)


0 commentaires

11
votes

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.


0 commentaires

1
votes

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


0 commentaires