सी का मेरा बहुत ही बुनियादी ज्ञान और संकलन प्रक्रिया हाल ही में जंगली हो गई है। मैं निम्नलिखित प्रश्न का उत्तर जानने की कोशिश कर रहा था लेकिन मैं संकलन, लिंक और प्री-प्रोसेसिंग चरण मूल बातें कनेक्ट नहीं कर सका। Google पर एक त्वरित खोज ने या तो बहुत मदद नहीं की। इसलिए, मैंने ज्ञान के अंतिम स्रोत पर आने का फैसला किया :) शीर्षलेख फ़ाइलों में परिवर्तनीय परिभाषा
मुझे पता है: चर .h फ़ाइलों में चर परिभाषित नहीं किया जाना चाहिए। वहां उन्हें घोषित करना ठीक है।
क्यों: क्योंकि एक हेडर फ़ाइल एकाधिक स्थानों से शामिल हो सकती है, इस प्रकार वेरिएबल को एक से अधिक बार फिर से परिभाषित कर सकते हैं (लिंकर त्रुटि देता है)।
संभावित कार्य-आसपास: शीर्षलेख फ़ाइलों में हेडर-गार्ड का उपयोग करें और उसमें चर परिभाषित करें।
क्या यह वास्तव में एक समाधान है: नहीं। क्योंकि हेडर-गार्ड प्रीप्रोकैसिंग चरण के लिए हैं। यह संकलक को बताना है कि यह हिस्सा पहले ही शामिल हो चुका है और इसे एक बार फिर शामिल नहीं किया गया है। लेकिन हमारी एकाधिक परिभाषा त्रुटि लिंकर भाग में आती है - संकलन के बाद बहुत कुछ।
इस पूरी चीज ने मुझे & लिंकिंग कार्य को प्रीप्रोकैसिंग करने के बारे में भ्रमित कर दिया है। मैंने सोचा कि प्रीप्रोकैसिंग में कोड शामिल नहीं होगा, अगर हेडर गार्ड प्रतीक परिभाषित किया गया है। उस स्थिति में, एक चर समस्या की कई परिभाषा भी हल नहीं होनी चाहिए?
क्या होता है कि ये प्रीप्रोकैसिंग निर्देश संकलन प्रक्रिया को हेडर गार्ड के नीचे प्रतीकों को फिर से परिभाषित करने से बचाते हैं, लेकिन लिंकर को अभी भी प्रतीक की कई परिभाषाएं मिलती हैं?
यिक्स ... जो वास्तव में सरल था :) – Methos