2011-02-22 4 views
48

मेरा प्रीप्रोसेसर मानता है कि #if स्थितियों का मूल्यांकन करने के उद्देश्य से अपरिभाषित स्थिरांक 0 हैं।#if में उपयोग किए गए अपरिभाषित निरंतरता का मूल्य क्या है?

क्या इस पर भरोसा किया जा सकता है, या अपरिभाषित स्थिरांक अनिर्धारित व्यवहार देते हैं?

उत्तर

56

हां, इस पर भरोसा किया जा सकता है। C99 मानक §6.10.1 ¶3 पर निर्दिष्ट करता है:

बाद मैक्रो विस्तार और परिभाषित एकल ऑपरेटर के कारण सभी प्रतिस्थापन प्रदर्शन किया गया है, सभी शेष पहचानकर्ता पीपी-संख्या 0

बदल दिए जाते हैं

संपादित

क्षमा करें, मैंने सोचा कि यह एक सी सवाल था; अभी भी, कोई बड़ी बात नहीं, सी ++ मानक (§16.1 ¶4) में बराबर अनुभाग राज्यों:

मैक्रो विस्तार और परिभाषित एकल ऑपरेटर , सभी शेष पहचानकर्ता और कीवर्ड प्रदर्शन किया गया है की वजह से सभी प्रतिस्थापन के बाद, true और false के अलावा, पीपी-संख्या 0

फर्क सिर्फ इतना है true और false के विभिन्न हैंडलिंग, जो सी में विशेष हैंडलिंग की जरूरत नहीं है, जबकि C++ वे एक विशेष अर्थ भी है बदल दिए जाते हैं preprocessing चरण में।

12

अभिव्यक्ति का मूल्यांकन करने से पहले एक पहचानकर्ता जिसे मैक्रो के रूप में परिभाषित नहीं किया गया है उसे 0 में परिवर्तित कर दिया गया है।

अपवाद पहचानकर्ता true है, जिसे 1 में परिवर्तित किया गया है। यह सी ++ प्रीप्रोसेसर के लिए विशिष्ट है; सी में, ऐसा नहीं होता है और true का उपयोग करने के लिए आपको <stdbool.h> शामिल करने की आवश्यकता होगी, इस मामले में इसे मैक्रो के रूप में परिभाषित किया जाएगा और कोई विशेष हैंडलिंग आवश्यक नहीं है।

संबंधित मुद्दे