प्रीप्रोसेसर क्या है? (What is Preprocessor In C In Hindi)

हेलो फ्रेंड्स, आज के इस आर्टिकल में हम Preprocessor के बारे में बात करने वाले है | 

आज हम विस्तार से जानेंगे कि प्रीप्रोसेसर क्या है? (What is Preprocessor in c in Hindi) और प्रीप्रोसेसर का उपयोग क्यों किया जाता है |

प्रीप्रोसेसर क्या है? ये जानने के लिए सबसे पहले आपको प्रोग्राम Execution cycle के बारे में जानना जरुरी है, क्योकि प्रोग्राम लिखने और C में बने प्रोग्राम को Execute करने के बीच कई steps शामिल हैं और बिना इन स्टेप्स को जाने आप Preprocessor का वास्तविक महत्त्व नहीं समझ पाएंगे, तो आइये सबसे पहले इन स्टेप के बारे में जानते है | 

Source code -> Preprocessor  -> Comiler -> Linker -> Executable Code (Software)

Program process cycle

ऊपर दिए गए diagram को आप एक बार अच्छे से देखे | इस diagram में आपको प्रोग्राम का प्रोसेस Cycle दिखाया गया है | 

इस diagram में बताया गया है कि कैसे एक सोर्स कोड (प्रोग्रामर द्दारा लिखा गया कोड सोर्स कोड कहलाता है इसका एक्सटेंशन .c होता है) Executable Code में बदलता है |

इस पुरे प्रोसेस में प्रीप्रोसेसर की काफी अहम भूमिका होती है | मगर अब सवाल ये आता है कि ये प्रीप्रोसेसर क्या है? और इसका क्या उपयोग है?

तो आइये अब बिना समय गवाए जानते है कि प्रीप्रोसेसर क्या है?

Preprocessor In C In Hindi

प्रीप्रोसेसर क्या है? (What is Preprocessor In C In Hindi)

Preprocessor, जैसे की नाम से स्पष्ट हो रहा है, कि यह एक ऐसा प्रोग्राम है जो हमारे source code को compilation से पहले प्रोसेस करता है | 

प्रीप्रोसेसर, पूरे Source code को स्कैन करता है और उसे Modify करता है, और फिर उस मॉडिफाई कोड को कम्पाइलर को compilation के लिए दे देता है |

प्रीप्रोसेसर, Source code को process करते समय header files (जैसे -: stdio.h, conio.h, string.h, maths.h आदि) और macros (जैसे -: #define, _TIME_ , _FILE_ आदि ) को, परिभाषित फ़ाइलों और मानों के साथ बदल देता है।

Preprocessor, #include से शुरू होने वाले कोड को interpret करता है मतलब अगर हमारे कोड में #include<stdio.h> हैडर फाइल का उल्लेख है तो Preprocessor, #include<stdio.h> कोड को ‘stdio.h’ फाइल के कंटेंट से replace कर देता है | इसे Pre-processing कहते है |

# symbol से शुरू होने वाले लाइन को preprocessor directives के रूप में जाना जाता है। 

जब प्रीप्रोसेसर को # symbol से शुरू होने वाली लाइन मिलती है, तो वह इसे अपने लिए एक कमांड मानता है और उसी के अनुसार काम करता है। 

चूँकि # से शुरू होने वाले सभी निर्देशों को प्रीप्रोसेसर द्वारा निष्पादित कर दिया जाता है इसलिए कंपाइलर को # से शुरू होने वाली कोई भी लाइन प्राप्त नहीं होती |  

Preprocessor directives की निम्नलिखित विशेषताएं हैं -:

  • प्रत्येक Preprocessor directive, # सिंबल से शुरू होते है।
  • एक लाइन पर केवल एक ही Preprocessor directive हो सकता है।
  • Preprocessor directives के अंत में कोई semicolon नहीं होता | 
  • Preprocessor directives को प्रोग्राम में कहीं भी रखा जा सकता है (फंक्शन के अंदर या फंक्शन के बहार)| लेकिन आमतौर पर Preprocessor directives को  प्रोग्राम के शुरुआत में लिखा जाता है | 

Preprocessor Directives के प्रकार (Types of Preprocessor Directives In C) 

Preprocessor Directives को चार भागो में विभाजित किया गया है -:

  • Macros
  • File Inclusion
  • Conditional Compilation
  • Other directives

आइये अब हम इन सभी Preprocessor Directives के बारे में एक एक करके समझते है |

Macros -: #define 

Macros एक तरह के identifiers होते है जो साधरणतः कैपिटल लेटर्स में लिखे जाते है ताकि इन्हे नार्मल वेरिएबल से अलग दिखाया जा सके | 

Basic syntax 

#define  macro_name macro_expansion

For example -:

#deflne TRUE 1
#define FALSE 0
#define PI 3.14159265
#define MAX 100
#define RETIRE AGE 58
  • #define एक preprocessor directive है जो macros डिफाइन करता है |
  • macro_expansion कोई भी टेक्स्ट हो सकता है। 
  • macro_name और macro_expansion के बीच एक स्पेस होना आवश्यक है। 
  • सी प्रीप्रोसेसर, macro_name की सभी घटनाओं को macro_expansion से replace कर देता है।

आइये macros को हम एक प्रोग्राम के द्वारा और अच्छे समझते है |

Example Program

#include <stdio.h>

// macro definition
#define LIMIT 10 
int main()
{
     int i;
     for ( i = 0; i < LIMIT; i++) 
     {
	printf("%d \n",i);
      }

     return 0;
}

इस प्रोग्राम में मैंने LIMIT नाम से एक macro डिफाइन किया है जिसकी वैल्यू 10 है | प्रोग्राम में जहा कही भी इस मैक्रो (LIMIT) का उपयोग होगा वह पर प्रीप्रोसेसर उस मैक्रो नाम को replace करके उसकी जगह उसकी वैल्यू (10) को रख देगा | 

Output -:

0
1
2
3
4
5
6
7
8
9

दोस्तों यदि आपको macros के बारे में विस्तार से जानना है तो निचे दिए गए लिंक से आप macros के बारे में अच्छे से जान सकते है | इसमें मैंने macro के बारे में विस्तार से समझया है -:

  • Macro In C

आइये अब हम बात करते है File Inclusion के बारे में |

File Inclusion

#include, Preprocessor directive का उपयोग सी लैंग्वेज में फाइल के कंटेंट को सोर्स कोड में शामिल करने के लिए किया जाता है | 

#include, Preprocessor directive की मदद से हम दो प्रकार की फाइल के कंटेंट को अपने सोर्स कोड में शामिल कर सकते है -:

  • Header File or Standard files
  • User defined files

Header File or Standard files -:

Header File or Standard files ऐसे फाइल होते है जिनमे predefined functions का डिक्लेरेशन होता है | 

सी लैंग्वेज में एक रूल है जिसके मुतबिक किसी भी फंक्शन का उपयोग करने के लिए सबसे पहले हमे उस फंक्शन को डिक्लेअर करना जरुरी है | बिना फंक्शन डिक्लेअर किये हम उस फंक्शन का उपयोग अपने प्रोग्राम में नहीं कर सकते | और जैसे की हम सब जानते है कि फंक्शन दो तरह के होते है -: 

  • Predefined function 
  • User-defined function 

चूँकि predefined functions पहले से डिफाइंड होते है इसलिए प्रोग्राम में इन्हे उपयोग करने के लिए हमे सिर्फ इनका डिक्लेरेशन करना होता है | 

इन predefined फंक्शन का डिक्लेरेशन इन हैडर फाइल्स में होता है जिनको हम #include, Preprocessor directive की मदद से शमिल करते है | 

Syntax:

#include< file_name >

यहाँ पर file_name उस हैडर फाइल का नाम है जिसके कंटेंट को हमे अपने सोर्स कोड में शामिल करना है | 

Example 

#include<stdio.h>
#include<conio.h>

इस उदाहरण में stdio.h और conio.h हैडर फाइल के कॉन्टैन को सोर्स फाइल में शामिल करने का इंस्ट्रक्शन है इसलिए जैसे ही प्रीप्रोसेसर इस लाइन को देखेगा, इन हैडर फाइल के कॉन्टैन को सोर्स कोड में शामिल कर देगा | इन header files में printf(), scanf(), clrscr(), getch() जैसे predefined फंक्शन का डिक्लेरेशन होता है |

User-defined files

यूजर या प्रोग्रामर जब कोई प्रोग्राम बनाता है तब वह उस प्रोग्राम को कई भागो में बाँट करके बना सकता है | प्रोग्राम के ये सभी भाग यूजर डिफाइंड फाइल कहलाती है | यूजर इन फाइल के कंटेंट को #include Preprocessor directive की मदद से प्रोग्राम में कही भी जोड़ सकता है |

यूजर डिफाइंड फाइल को सोर्स कोड में शामिल करने के लिए कुछ इस तरह सिंटेक्स लिखा जाता है -:

Syntax -:

#include"filename"

यहाँ पर filename की जगह उस फाइल का नाम आएगा जिसका कंटेंट आप अपने सोर्स कोड में शामिल करना चाहते है | 

Example -:

#include"C:\mydir\myfile.h"

Note -:

  • #include directive का उपयोग केवल हैडर फाइल के कंटेंट को सोर्स कोड में शामिल करने के लिए  किया जाता है | इसका उपयोग ‘.c’ files के कंटेंट को शामिल करने के लिए नहीं किया जा सकता | 
  •  header files का एक्सटेंशन .h होता है ताकि इसे दूसरे सी फाइलो से अलग पहचाना जा सके | हालाँकि ऐसा जरुरी नहीं है | 
  • Header files साधारणतः macro definitions और enum, structure, union, typdef, external functions and global variables के डिक्लेरेशन कॉन्टैन करते है | 
  • angled brackets (< >) का उपयोग header files या standard files को include करने के लिए किया जाता है और double quotes का उपयोग प्रोग्राम से रिलेटेड यूजर डिफाइंड  हैडर फाइल को शामिल करने के लिए किया जाता है | 

Conditional Compilation

Conditional Compilation directives ऐसे preprocessor directives होते है जो प्रोग्राम के किसी विशेष भाग को compile करने या कुछ शर्तों के आधार पर कुछ विशेष भाग के compilation को छोड़ने में मदद करते हैं।

#ifdef, #if, #defined, #else and #elseif Preprocessor Directive का इस्तेमाल Conditional Compilation में किया जाता है | 

आइये जानते है इनमे से कुछ preprocessor directive के बारे में 

#ifdef Directive

#ifdef directive का सिंटेक्स कुछ ऐसा होता है -:

Syntax 

#ifdef macroname
    statement1;
    statement2;
    .
    .
    .
    statementN;
#endif

यदि macro को ‘macroname’ नाम के साथ defined किया गया है तो statements का ये ब्लॉक सामान्य रूप से execute होगा लेकिन, यदि इसे defined नहीं किया गया है, तो compiler इस ब्लॉक के statements को छोड़ देगा इनको compile नहीं करेगा | 

#defined

#definition का उपयोग यह जांचने के लिए किया जाता है कि कोई एक निश्चित मैक्रो defined है या नहीं। इसे अक्सर #if directive के साथ उपयोग किया जाता है।

Syntax -:

#if defined(macro_name) 

Example -:

#if defined(FLAG)

यदि मैक्रो FLAG को #define का उपयोग करके define किया गया है, तो एक्सप्रेशन  defined(FLAG) का मान 1 होगा, अन्यथा इसका मान o होगा |

Other directives

ऊपर बताए गए प्रीप्रोसेसर डायरेक्टिव के आलावा और भी कई सारे डायरेक्टिव है जिनका लिस्ट मैंने निचे दिया है -:

Preprocessor DirectiveDescription
#errorError मैसेज प्रिंट करने के लिए किया जाता है |
#pragmaयह एक special purpose directive है जिसका उपयोग कंपाइलर को अतिरिक्त जानकारी प्रदान करने के लिए किया जाता है | 
#undefइसका उपयोग प्रीप्रोसेसर macros को undefine करने के लिए  किया जाता है |
#ifकंडीशन सही है या गलत चेक करने के लिए उपयोग किया जाता है 
#else यह #if का alternetive है यदि if कंडीशन गलत हो जाता है तब else के बाद का स्टेटमेंट execute होता है | 
#elifयह else if का combination है |
#endifइसका उपयोग #if के साथ आखिर में होता है |
#ifndefयदि macro डिफाइन नहीं है तो यह true रिटर्न करता है |

दोस्तों ऊपर बताये गए प्रीप्रोसेसर डायरेक्टिव के बारे में यदि आपको विस्तारपूर्वक उदाहरण के साथ जानना है तो नीचे कमेंट में बताये | यदि ज्यादा लोगो का कमेंट आता है तो मैं इन टॉपिक पर अलग से आर्टिकल लिखकर सभी चीजे विस्तार से बताऊंगा क्योकि यदि इन सभी को मैं इस एक आर्टिकल में बताने बैठा तो आर्टिकल काफी लम्बा हो जायेगा | 

Conclusion 

दोस्तों आशा करता हु कि आज के इस आर्टिकल को पढ़ने के बाद आपको प्रीप्रोसेसर क्या है? (What is Preprocessor in c in Hindi) और सी लैंग्वेज में प्रीप्रोसेसर का उपयोग क्यों किया जाता है से संबंधित सभी जानकारी मिल गई होगी |

अगर आप सी लैंग्वेज का Complete Tutorial चाहते है तो मेरे इस पोस्ट C Language Tutorial In Hindi को देखे यहाँ आपको C Programming Language के सभी टॉपिक्स step by step मिल जाएगी |

दोस्तों आशा करता हु कि आपको ये पोस्ट पसंद आई होगी और अगर आपको ये पोस्ट पसंद आया है तो इस पोस्ट को अपने अपने दोस्तों को शेयर करना न भूलिएगा ताकि उनको भी प्रीप्रोसेसर क्या है? (What is Preprocessor in c in Hindi) और सी लैंग्वेज में प्रीप्रोसेसर का उपयोग क्यों किया जाता है से संबंधित जानकारी प्राप्त हो सके |

अगर आपको अभी भी Preprocessor Kya Hai? से संबंधित कोई भी प्रश्न या Doubt है तो आप जरूर बताये मैं आपके सभी सवालों का जवाब दूँगा और ज्यादा जानकारी के लिए आप हमसे संपर्क कर सकते है

ऐसे ही नयी टेक्नोलॉजी ,Programming Language, Coding , C Language, C++, Python Course , Java Tutorial से रिलेटेड जानकारियाँ पाने के लिए हमारे इस वेबसाइट को सब्सक्राइब कर दीजिए | जिससे हमारी आने वाली नई पोस्ट की सूचनाएं जल्दी प्राप्त होगी |

Jeetu Sahu is A Web Developer | Computer Engineer | Passionate about Coding, Competitive Programming and Blogging

Leave a Comment