এখানে আসল উত্তরটি হ'ল: আপনি কখনই নিশ্চিতরূপে জানতে পারবেন না।
কমপক্ষে, অনানুষ্ঠানিক ক্ষেত্রে, আপনি নিশ্চিত করতে পারবেন না যে আপনি এটি সবই পেয়েছেন। অ্যাক্সেসযোগ্য কোডে উইকিপিডিয়ায় নিবন্ধ থেকে নিম্নলিখিতটি বিবেচনা করুন :
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
ফাংশনটির জন্য, বা গণিতের প্রতিটি ফাংশনের জন্য, বা কোনও নির্দিষ্ট-ইনপুট ফাংশন যার ডোমেনটি এটি বের করতে পারে তার জন্য সক্ষম হতে পারে । এটি খুব, খুব জটিল হয় এবং জটিলতাটি মূলত সীমাহীন। আপনি আপনার সংকলকটিতে পরিশীলনের স্তরগুলি যুক্ত করে রাখতে পারেন তবে কোনও কোডে সর্বদা স্নিগ্ধ করার একটি উপায় থাকবে যা কোনও প্রদত্ত ইনপুট সেটের জন্য অ্যাক্সেসযোগ্য হবে।
এবং তারপরে এমন ইনপুট সেট রয়েছে যা কেবল কখনও প্রবেশ করা হয় না। ইনপুট যা বাস্তব জীবনে কোনও ধারণা রাখে না বা অন্য কোথাও বৈধতা যুক্তি দ্বারা অবরুদ্ধ হবে। সংকলকগুলির সেগুলি সম্পর্কে জানার কোনও উপায় নেই।
এর শেষ পরিণতিটি হ'ল অন্যরা উল্লিখিত সফ্টওয়্যার সরঞ্জামগুলি অত্যন্ত কার্যকর, আপনি নিজেই কোডটি পরে না যাওয়ার পরে আপনি নিশ্চিতভাবেই জেনে যাবেন না যে আপনি সমস্ত কিছু ধরে ফেলেছেন। তারপরেও আপনি কখনই নিশ্চিত হতে পারবেন না যে আপনি কোনও কিছুই মিস করেন নি।
আইএমএইচওর একমাত্র আসল সমাধান হ'ল যথাসম্ভব সজাগ থাকা, আপনার নিষ্পত্তিস্থলে অটোমেশন ব্যবহার করা উচিত, রিফ্যাক্টর যেখানে আপনি পারেন এবং ক্রমাগত আপনার কোডটি উন্নত করার উপায় অনুসন্ধান করুন। অবশ্যই, যাইহোক এটি করা ভাল ধারণা।