मेरा प्रीप्रोसेसर मानता है कि #if
स्थितियों का मूल्यांकन करने के उद्देश्य से अपरिभाषित स्थिरांक 0 हैं।#if में उपयोग किए गए अपरिभाषित निरंतरता का मूल्य क्या है?
क्या इस पर भरोसा किया जा सकता है, या अपरिभाषित स्थिरांक अनिर्धारित व्यवहार देते हैं?
मेरा प्रीप्रोसेसर मानता है कि #if
स्थितियों का मूल्यांकन करने के उद्देश्य से अपरिभाषित स्थिरांक 0 हैं।#if में उपयोग किए गए अपरिभाषित निरंतरता का मूल्य क्या है?
क्या इस पर भरोसा किया जा सकता है, या अपरिभाषित स्थिरांक अनिर्धारित व्यवहार देते हैं?
हां, इस पर भरोसा किया जा सकता है। C99 मानक §6.10.1 ¶3 पर निर्दिष्ट करता है:
बदल दिए जाते हैंबाद मैक्रो विस्तार और परिभाषित एकल ऑपरेटर के कारण सभी प्रतिस्थापन प्रदर्शन किया गया है, सभी शेष पहचानकर्ता पीपी-संख्या
0
संपादित
क्षमा करें, मैंने सोचा कि यह एक सी सवाल था; अभी भी, कोई बड़ी बात नहीं, सी ++ मानक (§16.1 ¶4) में बराबर अनुभाग राज्यों:
मैक्रो विस्तार और परिभाषित एकल ऑपरेटर , सभी शेष पहचानकर्ता और कीवर्ड प्रदर्शन किया गया है की वजह से सभी प्रतिस्थापन के बाद,
true
औरfalse
के अलावा, पीपी-संख्या0
फर्क सिर्फ इतना है true
और false
के विभिन्न हैंडलिंग, जो सी में विशेष हैंडलिंग की जरूरत नहीं है, जबकि C++ वे एक विशेष अर्थ भी है बदल दिए जाते हैं preprocessing चरण में।
अभिव्यक्ति का मूल्यांकन करने से पहले एक पहचानकर्ता जिसे मैक्रो के रूप में परिभाषित नहीं किया गया है उसे 0
में परिवर्तित कर दिया गया है।
अपवाद पहचानकर्ता true
है, जिसे 1
में परिवर्तित किया गया है। यह सी ++ प्रीप्रोसेसर के लिए विशिष्ट है; सी में, ऐसा नहीं होता है और true
का उपयोग करने के लिए आपको <stdbool.h>
शामिल करने की आवश्यकता होगी, इस मामले में इसे मैक्रो के रूप में परिभाषित किया जाएगा और कोई विशेष हैंडलिंग आवश्यक नहीं है।