चाहे हेडर फ़ाइल में या स्रोत फ़ाइल में कुछ चीज़ घोषित की गई हो, तो कंपाइलर के लिए बिल्कुल कोई फर्क नहीं पड़ता। वास्तव में, संकलक उचित रूप से किसी भी "हेडर फाइल" के बारे में बिल्कुल कुछ नहीं जानता है, क्योंकि हेडर फ़ाइलों को प्रीप्रोसेसर द्वारा स्रोत फ़ाइलों में एम्बेड किया गया है, जो संकलक के ठीक पहले अपना काम करता है। जब तक स्रोत फाइलें (एम्बेडेड हेडर फाइलों के साथ) वास्तविक कंपाइलर पर पहुंच जाती हैं, तो मूल रूप से क्या था और हेडर फ़ाइलों से क्या डाला गया था, यह बताने का कोई तरीका नहीं है। उसमें एम्बेडेड सभी शीर्षलेख फ़ाइलों के साथ स्रोत फ़ाइल को अनुवाद इकाई कहा जाता है। अर्थात। संकलक उचित इकाइयों के साथ काम करता है, कुछ "स्रोत" या "हेडर" फ़ाइलों के साथ नहीं।
सी भाषा में फ़ाइल स्कोप पर घोषित सभी ऑब्जेक्ट्स और फ़ंक्शंस में बाहरी लिंक डिफ़ॉल्ट रूप से है, जिसका अर्थ है कि वे पूरे कार्यक्रम के लिए वैश्विक हैं, अद्वितीय हैं। तो, आपने गलत तरीके से सोचा था। फ़ंक्शंस केवल एक स्रोत फ़ाइल के लिए स्थानीय नहीं हैं।
यदि आप एकल अनुवाद इकाई में कोई फ़ंक्शन (या ऑब्जेक्ट) स्थानीय बनाना चाहते हैं, तो आपको कुछ स्पष्ट कदम उठाने होंगे। आपको इसे static
के रूप में घोषित करना होगा। इसे स्थिर के रूप में घोषित करने से यह आंतरिक लिंक प्रदान करेगा, जिसका अनिवार्य रूप से अर्थ है कि यह इसकी अनुवाद इकाई के लिए आंतरिक हो जाता है।
अपने कार्यों को घोषित करना static
केवल तभी काम करेगा यदि उनमें से दोनों को वास्तव में अपनी स्वयं की अनुवाद इकाइयों में स्थानीय होना है। यदि यह मामला नहीं है, यानी यदि कम से कम एक कार्य वैश्विक रूप से सुलभ (लिंक करने योग्य) फ़ंक्शन होना चाहिए, तो आपके पास किसी एक कार्य का नाम बदलने के अलावा कोई अन्य विकल्प नहीं है।
यही कारण है कि मैं हमेशा चर और कार्यों के लिए वास्तव में सार्थक नामों का उपयोग करता हूं। यदि वे दो कार्य एक ही काम कर रहे हैं तो आपको उनमें से किसी एक की आवश्यकता नहीं है। यदि वे अलग-अलग चीजें कर रहे हैं तो प्रत्येक को एक सार्थक नाम दें जो दर्शाता है कि यह क्या करता है। जो भी आपका कोड बनाए रखना है, वह आपको धन्यवाद देगा। संभावना है, वह आप होंगे। – Mawg