Buradaki asıl cevap: Asla kesin olarak bilemezsiniz.
En azından, önemsiz durumlarda, hepsini aldığınızdan emin olamazsınız. Wikipedia'nın ulaşılamaz kod hakkındaki makalesinde aşağıdakileri göz önünde bulundurun :
double x = sqrt(2);
if (x > 5)
{
doStuff();
}
Wikipedia'nın doğru şekilde belirttiği gibi, akıllı bir derleyici böyle bir şeyi yakalayabilir. Ancak bir değişiklik düşünün:
int y;
cin >> y;
double x = sqrt((double)y);
if (x != 0 && x < 1)
{
doStuff();
}
Derleyici bunu yakalayacak mı? Olabilir. Ancak bunu yapmak için, sqrt
sabit bir skaler değere karşı çalıştırmaktan daha fazlasını yapması gerekecektir . Her (double)y
zaman bir tamsayı (kolay) olacağını ve sonra sqrt
tamsayılar kümesinin (sert) matematiksel aralığını anlaması gerekecektir . Çok karmaşık bir derleyici bunu sqrt
işlev için veya math.h dosyasındaki her işlev için veya etki alanını anlayabileceği herhangi bir sabit giriş işlevi için yapabilir. Bu çok, çok karmaşık hale gelir ve karmaşıklık temel olarak sınırsızdır. Derleyicinize gelişmişlik katmanları eklemeye devam edebilirsiniz, ancak her zaman belirli bir girdi kümesi için erişilemeyecek bazı kodlarda gizlice girmenin bir yolu olacaktır.
Ve daha sonra hiç girilmeyen girdi setleri var . Gerçek hayatta bir anlam ifade etmeyecek veya başka bir yerde doğrulama mantığı ile engellenecek girdiler. Derleyicinin bunları bilmesinin bir yolu yoktur.
Bunun sonucu, diğerlerinin bahsettiği yazılım araçları son derece yararlı olsa da, daha sonra kodu manuel olarak geçmedikçe her şeyi yakaladığınızdan emin olmayacaksınız. O zaman bile, hiçbir şeyi kaçırmadığınızdan asla emin olmayacaksınız.
Tek gerçek çözüm olan IMHO, olabildiğince uyanık olmak, emrinizde otomasyonu kullanmak, yapabileceğiniz yerlerde refactor kullanmak ve kodunuzu iyileştirmenin yollarını aramaktır. Tabii ki, yine de bunu yapmak iyi bir fikir.