একটি কঠোর ভাষা ব্যবহার করা কেবলমাত্র প্রয়োগের সঠিক হওয়া থেকে অনুমানের সঠিক হওয়া থেকে গোল পোস্টগুলিকে সরিয়ে দেয় না। এমন কিছু তৈরি করা শক্ত যা খুব ভুল, তবুও যুক্তিযুক্তভাবে সুসংগত; এই কারণেই সংকলকরা এতগুলি বাগ ধরেন।
পয়েন্টার গাণিতিক যেমনটি সাধারণত তৈরি করা হয় ততক্ষণ সাউন্ড না কারণ টাইপ সিস্টেমটি আসলে এর অর্থ বোঝার কথাটি বোঝায় না। কোনও আবর্জনা সংগ্রহ করা ভাষায় কাজ করার মাধ্যমে আপনি এই সমস্যাটিকে পুরোপুরি এড়াতে পারবেন (স্বাভাবিক পদ্ধতির ফলে যা আপনাকে বিমূর্ততার জন্য অর্থ প্রদান করে)। অথবা আপনি কী ধরণের পয়েন্টার ব্যবহার করছেন সে সম্পর্কে আপনি আরও সুনির্দিষ্ট হতে পারেন, যাতে সংকলকটি বেমানান এমন কোনও কিছু প্রত্যাখ্যান করতে পারে যা কেবল লিখিত হিসাবে সঠিক প্রমাণিত হতে পারে না। এটি জং এর মতো কিছু ভাষার যোগাযোগ।
নির্মিত প্রকারগুলি প্রমাণের সমতুল্য, সুতরাং আপনি যদি এমন কোনও টাইপ সিস্টেম লিখেন যা এটি ভুলে যায় তবে সমস্ত ধরণের জিনিস ভুল হয়ে যায়। কিছুক্ষণ ধরে ধরে নিন যে যখন আমরা কোনও প্রকার ঘোষণা করি তখন আমাদের আসল অর্থ আমরা ভেরিয়েবলের মধ্যে কী তা নিয়ে সত্যতা জোর দিয়ে চলেছি।
- int * x; // একটি মিথ্যা দাবি। এক্স বিদ্যমান এবং কোন প্রকারের দিকে নির্দেশ করে না
- int * y = z; // z কেবলমাত্র যদি কোন আন্তঃকে নির্দেশ করে প্রমাণিত হয়
- * (x + 3) = 5; // কেবলমাত্র সত্য (x + 3) যদি x এর মতো একই অ্যারেতে কোনও বিন্দুতে নির্দেশ করে
- int c = a / b; // শুধুমাত্র সত্য যদি খ ননজারো হয়, যেমন: "ননজারো ইন্ট বি = ...;"
- nullable int * z = NULL; // nullaable int * কোনও int * এর মতো নয়
- int d = * z; // একটি ভ্রান্ত প্রতিশ্রুতি, কারণ z হ'ল নমনীয়
- যদি (z! = NULL) {int * e = z; // ঠিক আছে কারণ z নাল নয়
- বিনামূল্যে (Y); int w = * y; // ভুয়া দাবি, কারণ y এর আর ডাব্লুতে নেই
এই বিশ্বে পয়েন্টারগুলি নালার হতে পারে না। নালপয়েন্টার ডিरेফেরেন্সগুলি বিদ্যমান নেই এবং পয়েন্টারগুলিকে কোথাও নালার জন্য পরীক্ষা করতে হবে না। পরিবর্তে, "nullaable int *" হ'ল একটি আলাদা ধরণের যা এর মান হয় নালিতে বা একটি পয়েন্টারের কাছে আহরণ করতে। এর অর্থ এই যে বিন্দুতে নন-নাল অনুমান শুরু হয় আপনি নিজের ব্যতিক্রম লগইন করুন বা নাল শাখা নীচে যান।
এই বিশ্বে, সীমা ত্রুটির বাইরে অ্যারে উপস্থিত নেই। যদি সংকলক প্রমাণ করতে না পারে যে এটি সীমাবদ্ধ, তবে পুনরায় লেখার চেষ্টা করুন যাতে সংকলক এটি প্রমাণ করতে পারে। যদি এটি না করতে পারে, তবে আপনাকে সেই স্থানে ম্যানুয়ালি একটি অনুমান স্থাপন করতে হবে; সংকলক পরে এটির সাথে একটি দ্বন্দ্ব খুঁজে পেতে পারে।
এছাড়াও, আপনার যদি এমন একটি পয়েন্টার নাও থাকতে পারে যা আরম্ভ করা হয়নি, তবে আপনার অচিহ্নহীন স্মৃতিতে পয়েন্টার থাকবে না। আপনার যদি স্মৃতি মুক্ত করার জন্য কোনও পয়েন্টার থাকে তবে এটি সংকলক দ্বারা প্রত্যাখ্যান করা উচিত। মরিচে, এই ধরণের প্রমাণগুলি প্রত্যাশাকে যুক্তিযুক্ত করার জন্য বিভিন্ন পয়েন্টার প্রকার রয়েছে। এখানে একচেটিয়া মালিকানাধীন পয়েন্টার রয়েছে (অর্থাত্: কোনও উপাধি নেই), গভীরভাবে স্থায়ী কাঠামোর দিকে নির্দেশক। ডিফল্ট স্টোরেজ প্রকার পরিবর্তনযোগ্য, ইত্যাদি।
ইনপুট পৃষ্ঠের ক্ষেত্রফলটি প্রত্যাশিতভাবে ঠিক সীমিত করতে প্রোটোকলগুলিতে (যার মধ্যে ইন্টারফেস সদস্যদের অন্তর্ভুক্ত) একটি প্রকৃত সুসংজ্ঞাযুক্ত ব্যাকরণ প্রয়োগ করার বিষয়টিও রয়েছে। "নির্ভুলতা" সম্পর্কে জিনিসটি হ'ল: 1) সমস্ত অপরিজ্ঞাত রাজ্যগুলি থেকে মুক্তি পান 2) যৌক্তিক ধারাবাহিকতা নিশ্চিত করুন । চূড়ান্ত খারাপ সরঞ্জাম ব্যবহার (সঠিকতার দৃষ্টিকোণ থেকে) ব্যবহার করে সেখানে যাওয়ার অসুবিধার অনেক কিছুই আছে।
ঠিক এ কারণেই দুটি খারাপ অভ্যাস হ'ল বৈশ্বিক পরিবর্তনশীল এবং গোটোস। এই জিনিসগুলি যে কোনও কিছুর আগে প্রাক / পোস্ট / আক্রমণকারী শর্ত স্থাপন করা রোধ করে। প্রকারগুলি এত কার্যকর কেন এটিও। প্রকারগুলি আরও শক্তিশালী হওয়ার সাথে সাথে (প্রকৃত মানটিকে বিবেচনায় নিতে অবশেষে নির্ভরশীল প্রকারগুলি ব্যবহার করে) তারা নিজের মধ্যে গঠনমূলক যথার্থতার প্রমাণ হিসাবে উপস্থিত হয়; অসামঞ্জস্য প্রোগ্রামগুলি সংকলনে ব্যর্থ।
মনে রাখবেন যে এটি কেবল বোবা ভুল সম্পর্কে নয়। এটি চালাক অনুপ্রবেশকারীদের কাছ থেকে কোড বেসকে রক্ষা করার বিষয়েও। "আনুষ্ঠানিকভাবে নির্দিষ্ট প্রোটোকল অনুসরণ করে" এর মতো গুরুত্বপূর্ণ বৈশিষ্ট্যগুলির দৃ conv়প্রত্যয়ী মেশিন-উত্পাদিত প্রমাণ ছাড়াই আপনাকে জমা দিতে হবে এমন ক্ষেত্রেও এমন ঘটনা ঘটবে।