C प्रीप्रोसेसर कंपाइलर का हिस्सा नहीं है, बल्कि कंपाइलेशन प्रक्रिया में एक अलग चरण है। सरल शब्दों में, एक C प्रीप्रोसेसर सिर्फ एक टेक्स्ट सब्स्टीट्यूशन टूल है और यह कंपाइलर को वास्तविक कंपाइलेशन से पहले आवश्यक प्री-प्रोसेसिंग करने का निर्देश देता है। हम C प्रीप्रोसेसर को CPP के रूप में संदर्भित करेंगे।
सभी प्रीप्रोसेसर कमांड हैश सिंबल (#) से शुरू होती हैं। यह पहला नॉन-ब्लैंक कैरेक्टर होना चाहिए, और पठनीयता के लिए, एक प्रीप्रोसेसर डायरेक्टिव पहले कॉलम में शुरू होनी चाहिए। निम्नलिखित खंड सभी महत्वपूर्ण प्रीप्रोसेसर डायरेक्टिव को सूचीबद्ध करता है -
| Sr.No | डायरेक्टिव्स और विवरण |
|---|---|
| 1 | #define एक प्रीप्रोसेसर मैक्रो को प्रतिस्थापित करता है। |
| 2 | #include किसी अन्य फाइल से एक विशेष हेडर सम्मिलित करता है। |
| 3 | #undef एक प्रीप्रोसेसर मैक्रो को अपरिभाषित करता है। |
| 4 | #ifdef यदि यह मैक्रो परिभाषित है तो सच लौटाता है। |
| 5 | #ifndef यदि यह मैक्रो परिभाषित नहीं है तो सच लौटाता है। |
| 6 | #if परीक्षण करता है कि क्या कंपाइल-टाइम कंडीशन सच है। |
| 7 | #else #if के लिए विकल्प। |
| 8 | #elif एक स्टेटमेंट में #else और #if। |
| 9 | #endif प्रीप्रोसेसर कंडीशनल समाप्त करता है। |
| 10 | #error stderr पर एरर मैसेज प्रिंट करता है। |
| 11 | #pragma एक मानकीकृत विधि का उपयोग करके कंपाइलर को विशेष कमांड जारी करता है। |
प्रीप्रोसेसर्स के कुछ उदाहरण -
विभिन्न डायरेक्टिव को समझने के लिए निम्नलिखित उदाहरणों का विश्लेषण करें।
#define MAX_ARRAY_LENGTH 20
यह डायरेक्टिव CPP को MAX_ARRAY_LENGTH के इंस्टेंस को 20 से प्रतिस्थापित करने के लिए कहता है। पठनीयता बढ़ाने के लिए स्थिरांक के लिए #define का उपयोग करें।
#include <stdio.h> #include "myheader.h"
ये डायरेक्टिव CPP को सिस्टम लाइब्रेरी से stdio.h प्राप्त करने और वर्तमान सोर्स फाइल में टेक्स्ट जोड़ने के लिए कहते हैं। अगली लाइन CPP को स्थानीय डायरेक्टरी से myheader.h प्राप्त करने और सामग्री को वर्तमान सोर्स फाइल में जोड़ने के लिए कहती है।
#undef FILE_SIZE #define FILE_SIZE 42
यह CPP को मौजूदा FILE_SIZE को अपरिभाषित करने और इसे 42 के रूप में परिभाषित करने के लिए कहता है।
#ifndef MESSAGE #define MESSAGE "You wish!" #endif
यह CPP को MESSAGE को केवल तभी परिभाषित करने के लिए कहता है जब MESSAGE पहले से परिभाषित न हो।
#ifdef DEBUG /* आपके डिबगिंग स्टेटमेंट यहां */ #endif
यह CPP को संलग्न स्टेटमेंट को प्रोसेस करने के लिए कहता है यदि DEBUG परिभाषित है। यह उपयोगी है यदि आप संकलन के समय gcc कंपाइलर को -DDEBUG फ्लैग पास करते हैं। यह DEBUG को परिभाषित करेगा, इसलिए आप संकलन के दौरान फ्लाई पर डिबगिंग को चालू और बंद कर सकते हैं।
प्रीडिफाइन्ड मैक्रोज़ -
ANSI C कई मैक्रोज़ परिभाषित करता है। हालांकि प्रत्येक प्रोग्रामिंग में उपयोग के लिए उपलब्ध है, प्रीडिफाइन्ड मैक्रोज़ को सीधे संशोधित नहीं किया जाना चाहिए।
| Sr.No | मैक्रो और विवरण |
|---|---|
| 1 | __DATE__ "MMM DD YYYY" प्रारूप में एक कैरेक्टर लिटरल के रूप में वर्तमान तिथि। |
| 2 | __TIME__ "HH:MM:SS" प्रारूप में एक कैरेक्टर लिटरल के रूप में वर्तमान समय। |
| 3 | __FILE__ इसमें वर्तमान फ़ाइलनाम एक स्ट्रिंग लिटरल के रूप में होता है। |
| 4 | __LINE__ इसमें वर्तमान लाइन नंबर एक दशमलव स्थिरांक के रूप में होता है। |
| 5 | __STDC__ जब कंपाइलर ANSI मानक का अनुपालन करता है तो 1 के रूप में परिभाषित। |
उदाहरण
#include <stdio.h> int main() { printf("File :%s\n", __FILE__ ); printf("Date :%s\n", __DATE__ ); printf("Time :%s\n", __TIME__ ); printf("Line :%d\n", __LINE__ ); printf("ANSI :%d\n", __STDC__ ); }
आउटपुट
File :test.c Date :Jun 2 2012 Time :03:36:24 Line :8 ANSI :1