आप एक फ़ाइल में #include कहीं भी उपयोग कर सकते हैं , न केवल वैश्विक दायरे में - जैसे, एक फ़ंक्शन के अंदर (और यदि आवश्यक हो तो कई बार)। यकीन है, बदसूरत और अच्छी शैली नहीं है, लेकिन संभव है और कभी-कभी समझदार (आपके द्वारा शामिल फ़ाइल के आधार पर)। यदि #includeकभी केवल एक समय की बात थी तो वह काम नहीं करेगा। #includeबस सब के बाद पाठ प्रतिस्थापन (cut'n'paste) गूंगा करता है, और सब कुछ आप शामिल नहीं है एक हेडर फ़ाइल होना चाहिए। आप - उदाहरण के लिए - #includeएक फ़ाइल जिसमें स्वत: जनरेट किया गया डेटा होता है जिसमें आरंभिक डेटा को प्रारंभ करने के लिए कच्चा डेटा होता है std::vector। पसंद
std::vector<int> data = {
#include "my_generated_data.txt"
}
और "my_generated_data.txt" संकलन के दौरान निर्माण प्रणाली द्वारा उत्पन्न कुछ हो।
या हो सकता है कि मैं आलसी / मूर्ख / मूर्ख हूं और इसे एक फ़ाइल में डाल दिया ( बहुत ही विवादित उदाहरण):
const noexcept;
और फिर मैं करता हूँ
class foo {
void f1()
#include "stupid.file"
int f2(int)
#include "stupid.file"
};
एक और, थोड़ा कम वंचित, उदाहरण एक स्रोत फ़ाइल होगी जहां कई कार्यों के लिए एक नामस्थान में बड़ी मात्रा में उपयोग करने की आवश्यकता होती है, लेकिन आप using namespace foo;वैश्विक रूप से केवल यह कहना नहीं चाहते हैं कि बहुत सारे अन्य सामानों के साथ वैश्विक नामस्थान को विचलित कर देगा। तुम नहीं चाहते। तो आप एक फ़ाइल "फू" युक्त बनाएँ
using std::vector;
using std::array;
using std::rotate;
... You get the idea ...
और फिर आप अपने स्रोत फ़ाइल में ऐसा करते हैं
void f1() {
#include "foo"
}
void f2() {
}
void f3() {
#include "foo"
}
नोट: मैं इस तरह की चीजें करने की वकालत नहीं कर रहा हूं। लेकिन यह संभव है और कुछ कोडबेस में किया गया है और मैं नहीं देखता कि इसकी अनुमति क्यों नहीं दी जानी चाहिए। यह है इसके उपयोग कर सकते है।
यह भी हो सकता है कि जिस फ़ाइल को आप शामिल करते हैं, वह कुछ मैक्रोज़ ( #defineनों) के मूल्य के आधार पर भिन्न व्यवहार करती है । तो आप फ़ाइल को कई स्थानों में शामिल करना चाह सकते हैं, पहली बार कुछ मूल्य बदलने के बाद, इसलिए आपको अपनी स्रोत फ़ाइल के विभिन्न भागों में अलग-अलग व्यवहार मिलता है।
#ifdefsमें इसमें सशर्त संकलन हो सकता है । तो तुम कह सकते हैं#define MODE_ONE 1और फिर#include "has-modes.h", और फिर#undef MODE_ONEसाथ#define MODE_TWO 1और#include "has-modes.h"फिर से। प्रीप्रोसेसर इस तरह की चीजों के बारे में अज्ञेय है, और शायद कभी-कभी वे समझ में आ सकते हैं।