अपनी टिप्पणी से पर जारी: "आप आगे घोषणाओं पर विस्तृत कृपया कर सकते हैं" ...
आगे घोषणाओं वे वास्तव में क्या की तरह ध्वनि कर रहे हैं। एक घोषणा जो कहीं और (बाद में) परिभाषित की जाएगी। यह अवधारणा केवल वैश्विक प्रतीकों पर लागू होती है। परिणामस्वरूप बाइनरी के भीतर केवल वैश्विक प्रतीक की एक परिभाषा हो सकती है। हालांकि, आप उन्हें स्रोत कोड के भीतर बार-बार घोषित कर सकते हैं ताकि उन्हें संकलन चरण के दौरान संदर्भित किया जा सके।
ये प्रतीक असेंबली में परिभाषा बन जाते हैं जिन्हें बाद में लिंकिंग चरण के दौरान सबकुछ जोड़ने के लिए उपयोग किया जाता है।
शीर्षलेख फ़ाइलें कोड में कहीं और (बाद में) परिभाषित आगे की घोषणाओं का एक आम उपयोग उदाहरण हैं।
स्थानीय (स्वचालित) चर प्रतीकों में परिवर्तित नहीं होते हैं। तो जब आप
int x;
int x;
उसी दायरे में कुछ कहते हैं तो संकलक इसे अस्वीकार करता है क्योंकि यह गैरकानूनी है। स्थानीय चर केवल फ़ंक्शन के स्टैक फ्रेम के भीतर किसी विशेष स्थान को इंगित करने की सुविधा प्रदान करते हैं। उनकी परिभाषा सीमा स्कोप मार्कर {
}
के भीतर है।
शीर्षलेख फ़ाइलें वैश्विक चर और कार्यों के अनिवार्य रूप से "आगे की घोषणाएं" हैं; इसे struct foo;
में अपने लिए देखने के लिए।
यदि आप वैश्विक परिभाषा कारण त्रुटियों को देखना चाहते हैं तो प्रयास करें। int x = 10;
int x = 11;
एक वैश्विक के रूप में, और आप देखेंगे कि कंपाइलर "x का पुनर्वितरण" प्रभाव में त्रुटि उत्पन्न करता है।
स्रोत
2011-11-14 17:06:36
मैं जो कहता हूं उससे सहमत हूं। लेकिन स्थानीय चर के लिए एक ही बात क्यों लागू नहीं होती है। मुझे बात है कि मैं कुछ बहुत याद कर रहा हूँ। कृपया सही दिशा में इंगित करें – Bazooka
आप केवल उन चर के लिए टेंगेटिव परिभाषा प्राप्त कर सकते हैं जिनमें फ़ाइल स्कोप है, न कि स्थानीय चर के लिए। –