GCC 7.3 - 4.2.1. Ifdef

4.2.1 इफ्ड




gcc

4.2.1 इफ्ड

सशर्त का सबसे सरल प्रकार है

#ifdef MACRO

controlled text

#endif /* MACRO */

इस ब्लॉक को एक सशर्त समूह कहा जाता है। नियंत्रित पाठ प्रीप्रोसेसर के आउटपुट में शामिल किया जाएगा यदि और केवल अगर MACRO को परिभाषित किया गया है। हम कहते हैं कि एमएसीआरओ परिभाषित होने पर सशर्त सफल होता है, अगर यह नहीं है।

एक सशर्त के अंदर नियंत्रित पाठ में प्रीप्रोसेसिंग निर्देश शामिल हो सकते हैं। सशर्त सफल होने पर ही उन्हें निष्पादित किया जाता है। आप अन्य सशर्त समूहों के अंदर सशर्त समूहों को घोंसला कर सकते हैं, लेकिन उन्हें पूरी तरह से नेस्टेड होना चाहिए। दूसरे शब्दों में, ' #endif ' हमेशा निकटतम ' #ifdef ' (या ' #ifndef ', या ' #if ') से मेल खाता है। इसके अलावा, आप एक फ़ाइल में एक सशर्त समूह शुरू नहीं कर सकते हैं और इसे दूसरे में समाप्त कर सकते हैं।

यहां तक ​​कि अगर एक सशर्त विफल हो जाता है, तो इसके अंदर नियंत्रित पाठ अभी भी प्रारंभिक परिवर्तनों और टोकन के माध्यम से चलाया जाता है। इसलिए, यह सभी को कानूनी रूप से मान्य सी होना चाहिए। आम तौर पर इस मामले में एकमात्र तरीका यह है कि एक असफल सशर्त समूह के अंदर सभी टिप्पणियां और स्ट्रिंग शाब्दिक अभी भी ठीक से समाप्त होनी चाहिए।

' #Endif ' का अनुसरण करने के लिए टिप्पणी की आवश्यकता नहीं है, लेकिन यदि बहुत नियंत्रित पाठ है तो यह एक अच्छा अभ्यास है, क्योंकि यह लोगों को ' #endif ' से संबंधित ' #ifdef ' से मेल खाने में मदद करता है। पुराने कार्यक्रम कभी-कभी किसी टिप्पणी में संलग्न किए बिना सीधे ' #endif ' के बाद MACRO डालते हैं। यह C मानक के अनुसार अमान्य कोड है। सीपीपी इसे एक चेतावनी के साथ स्वीकार करती है। यह कभी भी प्रभावित नहीं करता है जो ' #ifndef ' ' #endif ' से मेल खाता है।

कभी-कभी आप कुछ कोड का उपयोग करना चाहते हैं यदि कोई मैक्रो परिभाषित नहीं है। आप ऐसा कर सकते हैं ' #ifdef ' के बजाय ' #ifndef ' लिखकर। ' #Ifndef ' का एक सामान्य उपयोग कोड को पहली बार हेडर फ़ाइल में शामिल करना है। एक बार केवल हेडर देखें।

मैक्रो परिभाषाएँ कई कारणों से संकलन के बीच भिन्न हो सकती हैं। यहाँ कुछ नमूने हैं।

  • कुछ मैक्रो प्रत्येक प्रकार की मशीन पर पूर्वनिर्धारित होते हैं ( सिस्टम-विशिष्ट पूर्वनिर्धारित मैक्रोज़ देखें )। यह आपको एक विशेष मशीन के लिए विशेष रूप से तैयार किए गए कोड प्रदान करने की अनुमति देता है।
  • सिस्टम हेडर फाइलें अधिक मैक्रोज़ को परिभाषित करती हैं, उनके द्वारा लागू की जाने वाली सुविधाओं से जुड़ी। आप इन मैक्रोज़ को ऐसी मशीन पर एक सिस्टम सुविधा का उपयोग करने से बचने के लिए इन मैक्रो के साथ परीक्षण कर सकते हैं जहां यह लागू नहीं है।
  • जब आप प्रोग्राम को संकलित करते हैं, तो मैक्रोज़ को -D और -U कमांड-लाइन विकल्पों के साथ परिभाषित या अपरिभाषित किया जा सकता है। आप मैक्रो नाम का चयन करके एक ही स्रोत फ़ाइल को दो अलग-अलग कार्यक्रमों में संकलित करने की व्यवस्था कर सकते हैं, यह निर्दिष्ट करने के लिए कि आप कौन सा प्रोग्राम चाहते हैं, इस मैक्रो को परिभाषित करने के लिए सशर्त लिखना, और फिर कमांड-लाइन विकल्पों के साथ मैक्रो की स्थिति को नियंत्रित करना। , शायद मेकफाइल में सेट। Invocation देखें।
  • आपके प्रोग्राम में एक विशेष हेडर फ़ाइल (जिसे अक्सर config.h कहा जाता है) हो सकती है जिसे प्रोग्राम के संकलित होने पर समायोजित किया जाता है। यह सिस्टम की सुविधाओं और कार्यक्रम की वांछित क्षमताओं के आधार पर मैक्रोज़ को परिभाषित या परिभाषित नहीं कर सकता है। समायोजन को autoconf जैसे उपकरण द्वारा स्वचालित किया जा सकता है, या हाथ से किया जा सकता है।

अगला: If , ऊपर: सशर्त सिंटैक्स [ Contents ] [ Index ]