Die wirkliche Antwort hier ist: Man kann nie wirklich sicher wissen.
Zumindest für nicht triviale Fälle können Sie nicht sicher sein, ob Sie alles bekommen haben. Beachten Sie Folgendes aus dem Wikipedia-Artikel über nicht erreichbaren Code :
double x = sqrt(2);
if (x > 5)
{
doStuff();
}
Wie Wikipedia richtig bemerkt, kann ein cleverer Compiler möglicherweise so etwas fangen. Aber überlegen Sie sich eine Modifikation:
int y;
cin >> y;
double x = sqrt((double)y);
if (x != 0 && x < 1)
{
doStuff();
}
Wird der Compiler dies erfassen? Vielleicht. Dazu muss jedoch mehr getan werden, als nur sqrt
einem konstanten Skalarwert zu begegnen. Es muss herausgefunden werden, dass (double)y
es sich immer um eine Ganzzahl handelt (einfach), und dann muss der mathematische Bereich sqrt
für die Menge der Ganzzahlen (schwer) verstanden werden. Ein sehr hoch entwickelter Compiler kann dies möglicherweise für die sqrt
Funktion oder für jede Funktion in math.h oder für jede Funktion mit fester Eingabe tun , deren Domäne er herausfinden kann. Dies wird sehr, sehr komplex und die Komplexität ist im Grunde unbegrenzt. Sie können Ihrem Compiler immer mehr Komplexitätsebenen hinzufügen, aber es gibt immer eine Möglichkeit, Code einzuschleusen, der für einen bestimmten Satz von Eingaben nicht erreichbar ist.
Und dann gibt es die Eingabesätze, die einfach nie eingegeben werden. Eingaben, die im wirklichen Leben keinen Sinn ergeben oder von der Validierungslogik an anderer Stelle blockiert werden. Der Compiler kann davon nichts wissen.
Das Endergebnis davon ist, dass die von anderen erwähnten Softwaretools zwar äußerst nützlich sind, Sie jedoch nie sicher wissen werden, dass Sie alles abgefangen haben, es sei denn, Sie gehen den Code anschließend manuell durch. Selbst dann werden Sie nie sicher sein, dass Sie nichts verpasst haben.
Die einzige wirkliche Lösung, IMHO, besteht darin, so wachsam wie möglich zu sein, die Ihnen zur Verfügung stehende Automatisierung zu nutzen, wo Sie können umzugestalten und ständig nach Möglichkeiten zu suchen, Ihren Code zu verbessern. Natürlich ist es trotzdem eine gute Idee, das zu tun.