C Language - Compilation process in c
What is a compilation
C Language - Compilation process in c
[एक संकलन क्या है?]
संकलन स्रोत कोड को ऑब्जेक्ट कोड में बदलने की एक प्रक्रिया है। यह कंपाइलर की मदद से किया जाता है। संकलक वाक्यात्मक या संरचनात्मक त्रुटियों के लिए स्रोत कोड की जाँच करता है, और यदि स्रोत कोड त्रुटि रहित है, तो यह ऑब्जेक्ट कोड उत्पन्न करता है।
(Compilation process in c)
C संकलन प्रक्रिया इनपुट के रूप में लिए गए स्रोत कोड को ऑब्जेक्ट कोड या मशीन कोड में परिवर्तित करती है। संकलन प्रक्रिया को चार चरणों में विभाजित किया जा सकता है, अर्थात, पूर्व-प्रसंस्करण, संकलन, संयोजन और लिंकिंग।
प्रीप्रोसेसर स्रोत कोड को इनपुट के रूप में लेता है, और यह स्रोत कोड से सभी टिप्पणियों को हटा देता है। प्रीप्रोसेसर प्रीप्रोसेसर निर्देश लेता है और इसकी व्याख्या करता है। उदाहरण के लिए, यदि <stdio.h>, प्रोग्राम में निर्देश उपलब्ध है, तो प्रीप्रोसेसर निर्देश की व्याख्या करता है और इस निर्देश को 'stdio.h' फ़ाइल की सामग्री से बदल देता है।
निष्पादन योग्य रूप में परिवर्तित होने से पहले हमारा कार्यक्रम निम्नलिखित चरणों से होकर गुजरता है:
Preprocessor-पूर्वप्रक्रमक
Compiler-संकलक
Assembler-कोडांतरक
Linker-लिंकर
(Compilation process in c)
Preprocessor-पूर्वप्रक्रमक
सोर्स कोड वह कोड होता है जो टेक्स्ट एडिटर में लिखा जाता है और सोर्स कोड फाइल को एक्सटेंशन ".c" दिया जाता है। यह स्रोत कोड पहले प्रीप्रोसेसर को दिया जाता है, और फिर प्रीप्रोसेसर इस कोड का विस्तार करता है। कोड का विस्तार करने के बाद, विस्तारित कोड को कंपाइलर को पास कर दिया जाता है।
Compiler-संकलक
कोड जो प्रीप्रोसेसर द्वारा विस्तारित किया जाता है उसे कंपाइलर को पास कर दिया जाता है। कंपाइलर इस कोड को असेंबली कोड में बदल देता है। या हम कह सकते हैं कि C कंपाइलर प्री-प्रोसेस्ड कोड को असेंबली कोड में बदल देता है।
Assembler-कोडांतरक
असेंबली कोड को असेंबलर का उपयोग करके ऑब्जेक्ट कोड में परिवर्तित किया जाता है। असेंबलर द्वारा उत्पन्न ऑब्जेक्ट फ़ाइल का नाम स्रोत फ़ाइल के समान है। डॉस में ऑब्जेक्ट फ़ाइल का एक्सटेंशन '.obj' है और यूनिक्स में, एक्सटेंशन 'o' है। यदि स्रोत फ़ाइल का नाम 'hello.c' है, तो ऑब्जेक्ट फ़ाइल का नाम 'hello.obj' होगा।
Linker-लिंकर
मुख्य रूप से C में लिखे गए सभी प्रोग्राम लाइब्रेरी फंक्शन का उपयोग करते हैं। ये लाइब्रेरी फ़ंक्शंस पूर्व-संकलित हैं, और इन लाइब्रेरी फ़ाइलों का ऑब्जेक्ट कोड '.lib' (या '.a') एक्सटेंशन के साथ संग्रहीत किया जाता है। लिंकर का मुख्य कार्य लाइब्रेरी फ़ाइलों के ऑब्जेक्ट कोड को हमारे प्रोग्राम के ऑब्जेक्ट कोड के साथ जोड़ना है। कभी-कभी स्थिति तब उत्पन्न होती है जब हमारा प्रोग्राम अन्य फाइलों में परिभाषित कार्यों को संदर्भित करता है; तो लिंकर इसमें बहुत महत्वपूर्ण भूमिका निभाता है। यह इन फाइलों के ऑब्जेक्ट कोड को हमारे प्रोग्राम से जोड़ता है। इसलिए, हम यह निष्कर्ष निकालते हैं कि लिंकर का काम हमारे प्रोग्राम के ऑब्जेक्ट कोड को लाइब्रेरी फाइलों और अन्य फाइलों के ऑब्जेक्ट कोड से जोड़ना है। लिंकर का आउटपुट निष्पादन योग्य फ़ाइल है। निष्पादन योग्य फ़ाइल का नाम स्रोत फ़ाइल के समान है, लेकिन केवल उनके एक्सटेंशन में भिन्न होता है। डॉस में, निष्पादन योग्य फ़ाइल का विस्तार '.exe' है, और UNIX में, निष्पादन योग्य फ़ाइल को 'a.out' नाम दिया जा सकता है। उदाहरण के लिए, यदि हम किसी प्रोग्राम में प्रिंटफ () फ़ंक्शन का उपयोग कर रहे हैं, तो लिंकर आउटपुट फ़ाइल में अपना संबद्ध कोड जोड़ता है।
आइए एक उदाहरण के माध्यम से समझते हैं।
hello.c
#include <stdio.h>
int main()
{
printf("Hello javaTpoint");
return 0;
}
अब, हम उपरोक्त प्रोग्राम का फ्लो डायग्राम बनाएंगे:
(Compilation process in c)
उपरोक्त प्रवाह आरेख में, किसी प्रोग्राम को निष्पादित करने के लिए निम्नलिखित कदम उठाए जाते हैं:
सबसे पहले, इनपुट फ़ाइल, यानी, hello.c, प्रीप्रोसेसर को पास की जाती है, और प्रीप्रोसेसर स्रोत कोड को विस्तारित स्रोत कोड में परिवर्तित करता है। विस्तारित स्रोत कोड का विस्तार hello.i होगा।
विस्तारित स्रोत कोड संकलक को दिया जाता है, और संकलक इस विस्तारित स्रोत कोड को असेंबली कोड में परिवर्तित करता है। असेंबली कोड का विस्तार hello.s होगा।
यह असेंबली कोड तब असेंबलर को भेजा जाता है, जो असेंबली कोड को ऑब्जेक्ट कोड में बदल देता है।
ऑब्जेक्ट कोड के निर्माण के बाद, लिंकर निष्पादन योग्य फ़ाइल बनाता है। लोडर तब निष्पादन के लिए निष्पादन योग्य फ़ाइल लोड करेगा।