सी मध्ये संकलन प्रक्रिया
संकलन म्हणजे काय?
संकलन म्हणजे स्रोत कोडाला ऑब्जेक्ट कोडमध्ये बदलण्याची प्रक्रिया. हे संकलकाच्या मदतीने केले जाते. संकलक स्रोत कोडमध्ये व्याकरण किंवा रचना त्रुटी तपासतो, आणि जर स्रोत कोड त्रुटीमुक्त असेल, तर तो ऑब्जेक्ट कोड तयार करतो.
C संकलन प्रक्रियेमध्ये स्रोत कोडाचा वापर करून त्याचे ऑब्जेक्ट कोड किंवा मशीन कोडमध्ये रूपांतर केले जाते. संकलन प्रक्रिया चार टप्प्यात विभागली जाऊ शकते: पूर्व-प्रक्रिया, संकलन, असेंबलिंग, आणि लिंकिंग.
पूर्व-प्रक्रियाकर्ता स्रोत कोडला इनपुट म्हणून घेतो आणि त्यामधील सर्व टिप्पण्या काढून टाकतो. पूर्व-प्रक्रियाकर्ता पूर्व-प्रक्रिया निर्देश घेतो आणि त्याचे स्पष्टीकरण करतो. उदाहरणार्थ, जर <PsaTidiAayaAae.h> हा निर्देश कार्यक्रमात उपलब्ध असेल, तर पूर्व-प्रक्रियाकर्ता त्या निर्देशाचे स्पष्टीकरण करतो आणि त्या निर्देशास 'PsaTidiAayaAae.h' फाइलच्या सामग्रीने बदलतो.
आमचा कार्यक्रम कार्यान्वित रूपात बदलण्यापूर्वी खालील टप्प्यातून जातो:
प्रीप्रोसेसर कंपाईलर असेंबलर लिंकर
प्रीप्रोसेसर
स्रोत कोड हा त्या कोडचा आहे जो टेक्स्ट एडिटरमध्ये लिहिला जातो आणि स्रोत कोड फाइलला ".c" ही एक्सटेंशन दिली जाते. हा स्रोत कोड प्राथमिक प्रक्रिया साधनाकडे पाठवला जातो, आणि नंतर प्राथमिक प्रक्रिया साधन हा कोड विस्तारीत करते. कोड विस्तारल्यानंतर, विस्तारित कोड संकलकाकडे पाठवला जातो.
कंपाईलर
प्रिप्रोसेसरद्वारे विस्तारित केलेला कोड कंपाइलरकडे जातो. कंपाइलर हा कोड असेंबली कोडमध्ये रूपांतरित करतो. किंवा आपण असे म्हणू शकतो की C कंपाइलर प्री-प्रोसेस्ड कोडला असेंबली कोडमध्ये रूपांतरित करतो.
असेंबलर
असेंबली कोडला ऑब्जेक्ट कोडमध्ये रूपांतरित करण्यासाठी असेंब्लरचा वापर केला जातो. असेंब्लरने निर्माण केलेल्या ऑब्जेक्ट फाइलचे नाव सोर्स फाइलच्या नावासारखेच असते. DOS मध्ये ऑब्जेक्ट फाइलची एक्स्टेंशन '.obj' आहे, आणि UNIX मध्ये, एक्स्टेंशन 'o' आहे. जर सोर्स फाइलचे नाव 'hello.c' असेल, तर ऑब्जेक्ट फाइलचे नाव 'hello.obj' असेल.
लिंकर
सर्व C मध्ये लिहिलेले प्रोग्राम लायब्ररी फंक्शन्सचा वापर करतात. ह्या लायब्ररी फंक्शन्स पूर्वीच तयार केलेले असतात, आणि ह्या लायब्ररी फाईल्सचा ऑब्जेक्ट कोड '.lib' (किंवा '.a') विस्तारासह ठेवला जातो. लिंकरचे मुख्य कार्य म्हणजे लायब्ररी फाईल्सचा ऑब्जेक्ट कोड आपल्या प्रोग्रामच्या ऑब्जेक्ट कोडसोबत एकत्र करणे. कधी कधी अशी परिस्थिती येते जेव्हा आपला प्रोग्राम इतर फाईल्समधील फंक्शन्सना संदर्भित करतो; तेव्हा लिंकर एक अत्यंत महत्वाची भूमिका साकारतो. तो ह्या फाईल्सच्या ऑब्जेक्ट कोडला आपल्या प्रोग्राममध्ये जोडतो. त्यामुळे, लिंकरचे कार्य म्हणजे आपल्या प्रोग्रामचा ऑब्जेक्ट कोड लायब्ररी फाईल्स आणि इतर फाईल्सच्या ऑब्जेक्ट कोडसोबत जोडणे. लिंकरचा आऊटपुट म्हणजे कार्यान्वित फाइल. कार्यान्वित फाईलचे नाव स्रोत फाईलप्रमाणेच असते, पण त्यांच्या विस्तारात फरक असतो. DOS मध्ये कार्यान्वित फाईलचा विस्तार '.exe' असतो, आणि UNIX मध्ये कार्यान्वित फाईलला 'a.out' असे नाव दिले जाऊ शकते. उदाहरणार्थ, जर आपला प्रोग्राम laiha() फंक्शनचा वापर करतो, तर लिंकर त्या संबंधित कोडला आऊटपुट फाईलमध्ये जोडतो.
हॅलो.सी
#vaapara <PsaTidiAayaAae.Pca>
paunaZ mauqya()
{
laiha("hWlaae jaavaaTpaEZMT");
vaapasakra 0;
}
प्रथम, इनपुट फाइल म्हणजे hello.c, प्रीप्रोसेसरकडे दिली जाते, आणि प्रीप्रोसेसर स्रोत कोडला विस्तारित स्रोत कोडमध्ये रूपांतरित करतो. विस्तारित स्रोत कोडची एक्सटेंशन hello.i असेल.
विस्तारित स्रोत कोड संकलकाकडे जातो, आणि संकलक हा विस्तारित स्रोत कोड असेंबली कोडमध्ये रूपांतरित करतो. असेंबली कोडची एक्सटेंशन hello.s असेल.
हा असेंबली कोड नंतर असेंब्लरकडे पाठवला जातो, जो असेंबली कोडला वस्तू कोडमध्ये रूपांतरित करतो.
वस्तू कोड तयार झाल्यानंतर, लिंककर कार्यान्वित फाइल तयार करतो. नंतर लोडर कार्यान्वित फाइल चालवण्यासाठी लोड करतो.