मेरी (सीमित - मैं सामान्य रूप से सी डेवलपर नहीं हूं) समझ के अनुसार, यह सी में निहित है। याद रखें कि सी को यह नहीं पता है कि वर्ग या नाम स्थान क्या हैं, यह सिर्फ एक लंबा कार्यक्रम है। इसके अलावा, कार्यों का उपयोग करने से पहले उन्हें घोषित किया जाना चाहिए।
उदाहरण के लिए, निम्नलिखित को एक संकलक त्रुटि देनी चाहिए:
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
त्रुटि यह होनी चाहिए कि "SomeOtherFunction घोषित नहीं है" क्योंकि आप इसे घोषणा से पहले कहते हैं। इसे ठीक करने का एक तरीका है, SomeFtherFunction को SomeFunction से ऊपर ले जाना। एक और तरीका यह है कि पहले कार्य हस्ताक्षर घोषित किया जाए:
void SomeOtherFunction();
void SomeFunction() {
SomeOtherFunction();
}
void SomeOtherFunction() {
printf("What?");
}
इससे संकलक को पता चल जाता है: कोड में कहीं देखें, कोई फ़ंक्शन है जिसे कुछऑथरफंक्शन कहा जाता है जो शून्य देता है और अपने मापदंडों को नहीं लेता है। इसलिए अगर आप कुछ ओथरफंक्शन को कॉल करने की कोशिश करने वाले कोड को एनकाउंटर करते हैं, तो घबराएं नहीं और इसके बजाय उसकी तलाश करें।
अब, कल्पना कीजिए कि आपके पास कुछ अलग .c फ़ाइलों में SomeFunction और SomeOtherFunction हैं। फिर आपको Some.c में "SomeOther.c" #include करना होगा। अब, SomeOther.c पर कुछ "निजी" फ़ंक्शन जोड़ें। चूंकि C निजी कार्यों को नहीं जानता है, इसलिए यह फ़ंक्शन Some.c में भी उपलब्ध होगा।
यह वह जगह है जहाँ .h फ़ाइलें आती हैं: वे उन सभी फ़ंक्शंस (और चर) को निर्दिष्ट करती हैं जिन्हें आप एक .c फ़ाइल से 'निर्यात' करना चाहते हैं जिसे अन्य .c फ़ाइलों में एक्सेस किया जा सकता है। इस तरह, आप एक सार्वजनिक / निजी क्षेत्र की तरह कुछ हासिल करते हैं। इसके अलावा, आप अपने स्रोत कोड को साझा किए बिना भी .h फ़ाइल को अन्य लोगों को दे सकते हैं - .h फ़ाइलें संकलित .lib फ़ाइलों के विरुद्ध भी काम करती हैं।
तो मुख्य कारण वास्तव में सुविधा के लिए है, स्रोत कोड संरक्षण के लिए और आपके आवेदन के कुछ हिस्सों के बीच डिकम्प्लिंग का एक सा है।
हालांकि वह सी था। C ++ ने कक्षाएं और निजी / सार्वजनिक संशोधक पेश किए, इसलिए यदि आप अभी भी पूछ सकते हैं कि क्या वे आवश्यक हैं, तो C ++ AFAIK को अभी भी उपयोग करने से पहले कार्यों की घोषणा की आवश्यकता है। इसके अलावा, कई सी ++ डेवलपर्स हैं या सी डेवेलोपर्स भी थे और अपनी अवधारणाओं और आदतों को सी ++ में ले लिया - क्यों नहीं तोड़ा गया है?