यदि कोई विशेष शीर्षलेख है जो आपको लगता है कि अब और ज़रूरत नहीं है (string.h कहें), तो आप यह टिप्पणी कर सकते हैं कि इसमें शामिल हैं, फिर इसे नीचे शामिल करें:
#ifdef _STRING_H_
# error string.h is included indirectly
#endif
बेशक आपके इंटरफ़ेस हेडर सीपीपी मेमोरी में उनके समावेश को रिकॉर्ड करने के लिए एक अलग #define सम्मेलन का उपयोग कर सकते हैं। या कोई सम्मेलन नहीं, जिस स्थिति में यह दृष्टिकोण काम नहीं करेगा।
फिर पुनर्निर्माण। तीन संभावनाएं हैं:
यह ठीक बनाता है। string.h संकलित-महत्वपूर्ण नहीं था, और इसके लिए शामिल को हटाया जा सकता है।
# यात्राएं। string.g को अप्रत्यक्ष रूप से किसी तरह शामिल किया गया था यदि आप अभी भी नहीं जानते हैं कि string.h की आवश्यकता है। यदि यह आवश्यक है, तो आपको इसे सीधे देखना चाहिए (नीचे देखें)।
आपको कुछ अन्य संकलन त्रुटि मिलती है। string.h की आवश्यकता थी और इसे अप्रत्यक्ष रूप से शामिल नहीं किया जा रहा था, इसलिए इसे शामिल करना शुरू करने के लिए सही था।
ध्यान दें कि अप्रत्यक्ष रूप से शामिल किए जाने पर निर्भर करता है जब आपका .h या .c सीधे दूसरे का उपयोग करता है। यह लगभग निश्चित रूप से एक बग है: आप इस बात का वादा कर रहे हैं कि आपके कोड को केवल उस हेडर की आवश्यकता होगी जब तक कि आप उपयोग कर रहे कुछ अन्य हेडर की आवश्यकता होती है। जो शायद तुम्हारा मतलब नहीं है।
हेडर के बारे में अन्य उत्तरों में उल्लिखित कैवियट, जो व्यवहार को संशोधित करते हैं, जो कि असफलताओं का कारण बनने वाली चीजों को यहां भी लागू करते हैं।