La vraie réponse ici est: vous ne pouvez jamais vraiment savoir avec certitude.
Au moins, pour les cas non triviaux, vous ne pouvez pas être sûr d'avoir tout compris. Tenez compte des éléments suivants de l'article de Wikipedia sur le code inaccessible :
double x = sqrt(2);
if (x > 5)
{
doStuff();
}
Comme Wikipedia le note correctement, un compilateur intelligent peut être capable d'attraper quelque chose comme ça. Mais considérons une modification:
int y;
cin >> y;
double x = sqrt((double)y);
if (x != 0 && x < 1)
{
doStuff();
}
Le compilateur comprendra-t-il cela? Peut être. Mais pour ce faire, il faudra faire plus que courir sqrt
contre une valeur scalaire constante. Il devra comprendre que ce (double)y
sera toujours un entier (facile), puis comprendre la plage mathématique de sqrt
l'ensemble des entiers (dur). Un compilateur très sophistiqué pourrait être en mesure de le faire pour la sqrt
fonction, ou pour chaque fonction dans math.h , ou pour toute fonction à entrée fixe dont il peut déterminer le domaine. Cela devient très, très complexe et la complexité est fondamentalement illimitée. Vous pouvez continuer à ajouter des couches de sophistication à votre compilateur, mais il y aura toujours un moyen de se faufiler dans du code qui sera inaccessible pour un ensemble donné d'entrées.
Et puis il y a les jeux d'entrée qui ne sont tout simplement jamais saisis. Entrée qui n'aurait aucun sens dans la vie réelle ou qui serait bloquée par une logique de validation ailleurs. Il n'y a aucun moyen pour le compilateur de les connaître.
Le résultat final de cela est que, bien que les outils logiciels mentionnés par d'autres soient extrêmement utiles, vous ne saurez jamais avec certitude que vous avez tout attrapé à moins de parcourir manuellement le code par la suite. Même alors, vous ne serez jamais certain de ne rien manquer.
La seule vraie solution, à mon humble avis, est d'être aussi vigilant que possible, d'utiliser l'automatisation à votre disposition, de refactoriser où vous le pouvez et de rechercher constamment des moyens d'améliorer votre code. Bien sûr, c'est une bonne idée de le faire de toute façon.