Compilation Process in C Programming Language in Hindi
What is a compilation in hindi
संकलन source कोड को ऑब्जेक्ट कोड में बदलने की एक प्रक्रिया है। यह कंपाइलर की मदद से किया जाता है। compiler syntactical या structural errors के लिए source कोड की जाँच करता है, और यदि स्रोत कोड error-free है, तो यह ऑब्जेक्ट कोड generate करता है।
C compilation प्रक्रिया source कोड को इनपुट कोड या मशीन कोड के रूप में लिया जाता है। compilation प्रक्रिया को चार चरणों में विभाजित किया जा सकता है, अर्थात, pre-processing, compiling, assembling और linking.
प्रीप्रोसेसर source कोड को इनपुट के रूप में लेता है, और यह स्रोत कोड से सभी comments को हटा देता है। प्रीप्रोसेसर preprocessor directive लेता है और उसको interpret करता है। उदाहरण के लिए, यदि <stdio.h>, निर्देश कार्यक्रम में उपलब्ध है, तो प्रीप्रोसेसर निर्देश (directive) को interpret करता है और इस directive को ‘stdio.h’ फ़ाइल की सामग्री से replace करता है।
निम्नलिखित चरण हैं जिनके माध्यम से हमारा कार्यक्रम एक निष्पादन योग्य रूप में परिवर्तित होने से पहले गुजरता है:
- Preprocessor
- Compiler
- Assembler
- Linker
Preprocessor
सोर्स कोड वह कोड होता है जो Text editor में लिखा होता है और सोर्स कोड फाइल को “.c” एक्सटेंशन दिया जाता है। यह source कोड पहले प्रीप्रोसेसर को दिया जाता है, और फिर प्रीप्रोसेसर इस कोड को विस्तारित (expand) करता है। कोड का विस्तार करने के बाद, विस्तारित कोड कंपाइलर को पास किया जाता है।
Compiler
प्रीप्रोसेसर द्वारा विस्तारित कोड को Compiler को पास किया जाता है। कंपाइलर इस कोड को Assembly कोड में परिवर्तित करता है। या हम कह सकते हैं कि C कंपाइलर Pre-processed कोड को असेंबली कोड में बदल देता है।
Assembler
Assembler का उपयोग करके असेंबली कोड को ऑब्जेक्ट कोड में बदल दिया जाता है। Assembler द्वारा उत्पन्न ऑब्जेक्ट फ़ाइल का नाम source फ़ाइल के समान है। DOS में ऑब्जेक्ट फ़ाइल का extention ‘.obj,’ है और UNIX में, एक्सटेंशन ‘o’ है। यदि source फ़ाइल का नाम ‘hello.c’ है, तो ऑब्जेक्ट फ़ाइल का नाम ‘hello.obj’ होगा।
Linker
मुख्य रूप से, C में लिखे गए सभी प्रोग्राम library function का उपयोग करते हैं। ये लाइब्रेरी फ़ंक्शंस pre-compiled हैं, और इन लाइब्रेरी फाइलों का ऑब्जेक्ट कोड ‘.lib’ (या ‘.a’) एक्सटेंशन के साथ संग्रहीत किया जाता है। linkrt का मुख्य कार्य हमारे प्रोग्राम के ऑब्जेक्ट कोड के साथ लाइब्रेरी फाइलों के ऑब्जेक्ट कोड को combine करना है। कभी-कभी स्थिति तब उत्पन्न होती है जब हमारा कार्यक्रम अन्य फाइलों में परिभाषित functions को संदर्भित करता है; तब linker इसमें बहुत महत्वपूर्ण भूमिका निभाता है। यह इन फाइलों के ऑब्जेक्ट कोड को हमारे प्रोग्राम से जोड़ता है। इसलिए, हम यह निष्कर्ष निकालते हैं कि linker का काम हमारे प्रोग्राम के ऑब्जेक्ट कोड को लाइब्रेरी फाइलों और अन्य फाइलों के ऑब्जेक्ट कोड के साथ जोड़ना है। linker का आउटपुट executable file है। executable फ़ाइल का नाम source फ़ाइल के समान है, लेकिन केवल उनके एक्सटेंशन भिन्न है। DOS में, executable file का extention ‘.exe’ है, और UNIX में, निष्पादन योग्य फ़ाइल को ‘a.out’ नाम दिया जा सकता है। उदाहरण के लिए, यदि हम किसी प्रोग्राम में printf () function का उपयोग कर रहे हैं, तो linker आउटपुट फाइल में अपना संबद्ध कोड जोड़ता है।
आइए एक उदाहरण के माध्यम से समझते हैं।
Hello C
- #include <stdio.h>
- int main()
- {
- printf(“Hello Hinditutorialspoint”);
- return 0;
- }
अब, हम उपरोक्त कार्यक्रम का एक flow diagram बनाएंगे:
उपरोक्त flow diagram में, किसी कार्यक्रम को निष्पादित करने के लिए निम्नलिखित कदम उठाए जाते हैं:
- सबसे पहले, इनपुट फ़ाइल, यानी, hello.c, प्रीप्रोसेसर को पास कर दी जाती है, और प्रीप्रोसेसर source कोड को expanded source कोड में बदल देता है। expanded स्रोत कोड का extension hello.i होगा ।
- Expanded स्रोत कोड Compiler को दिया जाता है, और कंपाइलर इस expanded स्रोत कोड को असेंबली कोड में परिवर्तित करता है। असेंबली कोड का extension hello.s होगा ।
- यह असेंबली कोड तब assembler को भेजा जाता है, जो असेंबली कोड को ऑब्जेक्ट कोड में परिवर्तित करता है।
- ऑब्जेक्ट कोड के निर्माण के बाद, linker निष्पादन (executable file) योग्य फ़ाइल बनाता है। loader निष्पादन के लिए executable file को लोड करेगा।