যদি এমন কোনও নির্দিষ্ট শিরোনাম থাকে যা আপনার মনে হয় যে আর প্রয়োজন হয় না (স্ট্রিং। H) বলুন তবে আপনি মন্তব্য করতে পারেন যা অন্তর্ভুক্ত রয়েছে এবং এরপরে এটি অন্তর্ভুক্ত করে সমস্ত নীচে রাখুন:
#ifdef _STRING_H_
# error string.h is included indirectly
#endif
অবশ্যই আপনার ইন্টারফেস শিরোনামগুলি সিপিপি মেমরিতে তাদের অন্তর্ভুক্তি রেকর্ড করতে একটি ভিন্ন # সংজ্ঞায়িত কনভেনশন ব্যবহার করতে পারে। বা কোনও কনভেনশন নেই, এই ক্ষেত্রে এই পদ্ধতির কাজ হবে না।
তারপরে পুনর্নির্মাণ করুন। তিনটি সম্ভাবনা রয়েছে:
এটা ঠিক আছে। স্ট্রিং.হ. সংকলন-সমালোচক ছিল না, এবং এর জন্য অন্তর্ভুক্ত থাকা সরিয়ে ফেলা যায়।
# অরর ট্রিপস। স্ট্রিং.এম.কে কোনওভাবে পরোক্ষভাবে অন্তর্ভুক্ত করা হয়েছিল আপনি এখনও জানেন না যে স্ট্রিং.হ প্রয়োজন হয় কিনা। যদি এটির প্রয়োজন হয়, আপনার সরাসরি এটি অন্তর্ভুক্ত করা উচিত (নীচে দেখুন)।
আপনি অন্য কিছু সংকলন ত্রুটি পান। স্ট্রিং.ইচ প্রয়োজন ছিল এবং অপ্রত্যক্ষভাবে অন্তর্ভুক্ত করা হচ্ছে না, তাই এর সাথে শুরু হওয়া সঠিক ছিল correct
মনে রাখবেন যে যখন আপনার .h বা .c সরাসরি অন্য কোনও ব্যবহার করে তখন অপ্রত্যক্ষ অন্তর্ভুক্তির উপর নির্ভর করে আপনি প্রায়শই একটি বাগ হন: আপনি কার্যকরভাবে প্রতিশ্রুতি দিচ্ছেন যে আপনি যে কোডটি ব্যবহার করছেন অন্য কোনও হেডার যতক্ষণ লাগবে ততক্ষণ আপনার কোডটিকে সেই শিরোনামের প্রয়োজন হবে, যা সম্ভবত আপনি বোঝাতে চেয়েছিলেন না
সাবধানতাগুলি শিরোনাম সম্পর্কে অন্যান্য উত্তরে উল্লিখিত যে আচরণগুলি পরিবর্তিত করে বরং এটি বলে যে বিল্ডিং ব্যর্থতার কারণ হিসাবে জিনিসগুলি এখানে প্রয়োগ হয়।