2015-11-11 8 views
9

मैंने स्टैक ओवरफ़्लो में पढ़ा है जिसमें सी फ़ाइल को किसी अन्य सी फ़ाइल में शामिल करना सबसे अच्छा अभ्यास नहीं है। मैं सोच रहा था कि मैं सीमॉड्यूलर सी अनुप्रयोग बनाने के लिए अनुशंसित तरीका क्या है?

में मॉड्यूलर अनुप्रयोग कैसे बना सकता हूं, मुझे समझ में आया कि आप सभी को हेडर फाइलें शामिल करने की अनुशंसा की जाती है, जिसमें कोड कार्यान्वयन स्वयं नहीं होता है बल्कि केवल "फ़ंक्शन कॉल" होता है।

संकलक कैसे संबंधित कोड को ढूंढने के लिए जानता है? क्या यह स्वचालित रूप से .c फ़ाइल को के समान नाम से देखता है .h फ़ाइल?

आम तौर पर, सी अनुप्रयोग के भीतर कोड कैसे अलग कर सकते हैं?

+0

आप सभी ग फ़ाइलें संकलन और लिंक इसी वस्तु एक साथ फाइल को छिपाने के लिए alows। – Michael

+0

कंपाइलर को यह जानने की आवश्यकता नहीं है कि कोड कहां ढूंढना है, कंपाइलर को केवल कार्यों (.h फ़ाइल) की परिभाषा की आवश्यकता है, लेकिन लिंकर को जानना आवश्यक है। और तुम उसे बताओ! उदाहरण के लिए यदि आप 'math.h' से कुछ फ़ंक्शंस का उपयोग करते हैं, तो आपको लिंकर को यह बताना होगा कि कोड' libm.so' फ़ाइल में है, इसलिए आप उसे कमांड लाइन पैरामीटर '-lm' देते हैं। – Nidhoegger

+0

मैं gcc कमांड के माध्यम से दो फ़ाइलों को मैन्युअल रूप से कैसे लिंक कर सकता हूं? (मान लें कि मेरा मुख्य demo.c और bit.c में आवश्यक फ़ंक्शन हैं) – Bracketz

उत्तर

7

आम तौर पर पूर्ण सी फाइलों के बजाय हेडर फाइलों में उलझन में बोलना सर्वोत्तम अभ्यास है हां। आपके कंपाइलर को यह जानने की आवश्यकता नहीं है कि कोई अन्य कोड कहां है, केवल इस्तेमाल किए गए कार्यों के प्रोटोटाइप।

प्रक्रिया का हिस्सा यह जानने की जरूरत है कि अन्य कोड कहां है, यह लिंकर है, जो संकलक नहीं है, लेकिन जीसीसी जैसे पूर्ण समाधानों में शामिल है।

उदाहरण के लिए जीसीसी में संकलन करते समय, आप लिंकर के लिए संदर्भ जोड़ सकते हैं, जैसा विशेष रूप से टिप्पणियों में उल्लेख किया गया है।

संकलक जीसीसी के साथ जोड़ने पर एक उदाहरण के लिए @jovit.royeca को क्रेडिट:

मान लीजिए आप अपने कार्यक्रम के लिए एक मुख्य फ़ाइल है demo.c

कहा जाता है आप इसे में फ़ाइल bit.c के कुछ कार्यों का उपयोग कर रहे हैं। क्या आप तो करने की ज़रूरत है एक हैडर bit.c से सभी वैश्विक चर और समारोह प्रोटोटाइप युक्त bit.h कहा जाता है बनाते हैं और फिर #include "bit.h" साथ demo.c में शामिल करें और फिर जीसीसी में लिंक तो जैसे:

gcc -o demo demo.c bit.c

सी/सी ++ के लिए ग्रहण जैसे कुछ पूर्ण समाधान स्वचालित रूप से एक परियोजना में सभी सी फाइलों को मानते हैं, उदाहरण के लिए मुख्य से जुड़े होंगे।

4

अनुशंसित तरीका मॉड्यूल (.c फाइल) को एक विशिष्ट कार्यक्षमता के साथ बनाना है; इसे एक वर्ग से तुलना करें। इस कार्यक्षमता को अन्य मॉड्यूल में उपलब्ध कराने के लिए, आप मॉड्यूल का खुलासा करने वाले कार्यों, डेटा प्रकारों और चर के साथ एक हेडर फ़ाइल बनाते हैं (उपलब्ध कराता है)।

कोई प्रोग्राम बनाने के लिए, आप मॉड्यूल लिखते हैं या फिर से उपयोग करते हैं और उन्हें मुख्य प्रोग्राम से कॉल करते हैं (उन्हें कॉल करने के लिए, आपको #include हेडर फाइलें चाहिए)।

मेकफ़ाइल, या आईडीई में "प्रोजेक्ट" आपके विकास पर्यावरण/कंपाइलर को बताता है जो मॉड्यूल/.c-फ़ाइलों को संकलित करने के लिए और फिर लिंकर उन्हें निष्पादन योग्य में जोड़ता है।

के रूप में वर्णित मॉड्यूल का उपयोग करके आप अन्य ग-फ़ाइलों से उनके कार्यान्वयन (जटिलता),

+0

धन्यवाद पॉल। मैं अपने सी अनुप्रयोगों को एमएस नोटपैड नामक एक बहुत ही सरल आईडीई में बना रहा हूं ;-)। मैं gcc कमांड के माध्यम से दो फ़ाइलों को मैन्युअल रूप से कैसे लिंक कर सकता हूं? – Bracketz

+0

ब्रैकेट, मुझे नहीं पता (जीसीसी नहीं जानते) लेकिन, जैसा कि हम सभी जानते हैं, "अगर कुछ भी मदद नहीं करता है, मैन्युअल पढ़ें!"; यह निश्चित रूप से आपको बताएगा कि इसके लिए कमांड लाइन कैसा दिखना चाहिए। –

+0

@ ब्रैकेटज़ मुझे पता है कि यह संभव नहीं हो सकता है, लेकिन यदि आप एक पूर्ण आईडीई का उपयोग नहीं करना चाहते हैं, तो आप कोडिंग-उन्मुख टेक्स्ट एडिटर का उपयोग कर सकते हैं, जो बहुत हल्के होते हैं, बहुत तेज होते हैं और सामान्य रूप से उपयोग किए जा सकते हैं, लेकिन अतिरिक्त विशेषताएँ। कुछ सिफारिशें हैं [सब्लिम टेक्स्ट] (http://www.sublimetext.com/), [एटम] (http://atom.io/), या [नोटपैड ++] (https://notepad-plus-plus.org /)। क्षमा करें अगर मैंने गलत तरीके से माना है कि आप अपनी सादगी के लिए नोटपैड का उपयोग करते हैं, और पहले से ही विकल्पों के बारे में जानते हैं। – Kroltan

संबंधित मुद्दे

 संबंधित मुद्दे