คำตอบที่แท้จริงคือ: คุณไม่สามารถรู้แน่ชัด
อย่างน้อยสำหรับกรณีที่ไม่น่าสนใจคุณไม่สามารถแน่ใจได้ว่าคุณได้รับมาทั้งหมด ลองพิจารณาสิ่งต่อไปนี้จากบทความของ Wikipedia เกี่ยวกับรหัสที่เข้าไม่ถึง :
double x = sqrt(2);
if (x > 5)
{
doStuff();
}
ในฐานะที่เป็นวิกิพีเดียบันทึกอย่างถูกต้องคอมไพเลอร์ที่ฉลาดอาจจับสิ่งนี้ แต่ให้พิจารณาการดัดแปลง:
int y;
cin >> y;
double x = sqrt((double)y);
if (x != 0 && x < 1)
{
doStuff();
}
คอมไพเลอร์จะจับสิ่งนี้หรือไม่? อาจจะ. แต่การทำเช่นนั้นจะต้องทำมากกว่าวิ่งsqrt
เทียบกับค่าสเกลาร์คงที่ มันจะต้องคิดออกว่า(double)y
จะเป็นจำนวนเต็ม (ง่าย) แล้วเข้าใจช่วงทางคณิตศาสตร์ของsqrt
ชุดจำนวนเต็ม (ยาก) คอมไพเลอร์ที่ซับซ้อนมากอาจสามารถทำสิ่งนี้สำหรับsqrt
ฟังก์ชั่นหรือสำหรับทุกฟังก์ชั่นในmath.hหรือสำหรับฟังก์ชั่นคงที่ซึ่งโดเมนสามารถหาได้ สิ่งนี้มีความซับซ้อนมากและความซับซ้อนนั้นไร้ขอบเขต คุณสามารถเพิ่มเลเยอร์ของความซับซ้อนในคอมไพเลอร์ของคุณได้ แต่จะมีวิธีการแอบดูในโค้ดบางอย่างที่ไม่สามารถเข้าถึงได้สำหรับชุดอินพุตที่กำหนด
แล้วมีชุดอินพุตที่ไม่เคยป้อน ข้อมูลที่ไม่สมเหตุสมผลในชีวิตจริงหรือถูกบล็อกโดยตรรกะการตรวจสอบที่อื่น คอมไพเลอร์ไม่มีทางรู้เกี่ยวกับสิ่งเหล่านั้น
ผลลัพธ์ที่ได้คือว่าแม้ว่าเครื่องมือซอฟต์แวร์อื่น ๆ ที่กล่าวมาจะมีประโยชน์มาก แต่คุณจะไม่ทราบแน่ชัดว่าคุณได้จับทุกอย่างยกเว้นว่าคุณใช้รหัสด้วยตนเองในภายหลัง ถึงอย่างนั้นคุณจะไม่มีวันแน่ใจว่าคุณไม่พลาดอะไรเลย
ทางออกที่แท้จริงเพียง IMHO คือต้องระมัดระวังเท่าที่จะเป็นไปได้ใช้ระบบอัตโนมัติในการกำจัดของคุณปรับโครงสร้างที่คุณสามารถทำได้และค้นหาวิธีปรับปรุงรหัสของคุณอย่างต่อเนื่อง แน่นอนว่าเป็นความคิดที่ดีที่จะทำเช่นนั้นต่อไป