Trop de messages et d’auteurs (corrigez-moi s’il y eu une autrice, aux accords je n’ai pas souvenir), c’est parti pour des réponses à des citations anonymes ^^' (et je vois que jo a été plus rapide que moi)
Réflexion faite, je me pose la question : étant donné les puissances des processeurs (L’argument du gain de performance me semble plus très convaincant), pourquoi le compilateur n’initialise pas par défaut les valeurs des variables, à la déclaration ?
Cela pourrait changer des comportements. J’ai croisé des programmes qui reposaient, à tord (car UB => le compilo fait ce qu’il veut), sur une pseudo initialisation aléatoire de variables non initialisées. Mais le pire pour moi, c’est que cela va cacher des erreurs.
A noter que MSVC initialiser les variables avec des valeurs spécifiques, en débug, justement pour faciliter la détection.
Et c’est à mon avis une très mauvaise idée. Un programme en débug devrait planter plus facilement qu’en release, car c’est dans les phases de tests qui tournent en debug que l’on chasse les bugs, comme le nom l’indique: dé-bug. Résultat des codes tombent en marche en débug, mais plantent en release, et des produits sont releasées au client en débug car ils plantent-c’est-pas-ma-faute en release…
On pourrait imaginer une option dans les compilos pour forcer l’initialisation par défaut. Mais je n’ai jamais vu ce genre d’option (ou je ne m’en souviens pas).
Ca existe bien chez certains compilos. Je croyais que c’était gcc, ça serait donc clang.
Je pense effectivement que le C se veut le plus proche de ce que le programmeur écrit.
Ah ah ah ah. S’ils savaient (hint: règle du as-if => le compilo a pour seule obligation de générer un code qui produit un résultat observable conforme à un code défini — i.e. sans UB)
Pour moi le point le plus difficile, c’est le UB. Quand c’est reproductible, c’est plus facile à débuger.
Quand une erreur numérique produit toujours le même résultat incorrect, ce peut aussi être plus difficile à repérer, surtout quand on n’a pas de référence/baseline pour tester le résultat. Je trouve ça plus fourbe. Maintenant je parle bien du cas numérique. Pour les pointeurs, je vis dans un monde de RAII: j’ai des invariants.
Ce n’est pas une question de performance mais d’idéologie. Le compilateur fait ce que tu dis. Dans l’idéal. Il devrait y avoir un syntaxe claire pour dire « Je ne veux pas que ça soit initialisé ». Et cette syntaxe ne devrait être qu’explicite; càd ne pas se confondre avec j’ai oublié d’initialiser.
Il me semble avoir vu des papiers en ce sens. C’est un débat récurrent sur r/cpp (reddit) Le problème est que cela va impacter rétroactivement trop de codes. Une seule solution: interdire à la place la déclaration de variables numériques sans initialisation. Obligation de const
ou de AAA. Là, on est sûr qu’on n’aura plus de numériques dans des états quantiques. Cela corrigera toutes les problématiques: non-initialisé, pessimisation, ou initialisé à des valeurs bidons (pour ce dernier seul const
apporte une solution absolue vu que l’on peut faire du AAA avec init à 0xbadc0de
et espérer réaffecter après…)