2009-10-23 11 views
13

मैं समझता हूं कि आकार एक ऑपरेटर है, जिसका मूल्यांकन एक पूर्णांक स्थिरांक के लिए संकलित समय पर किया जाता है।मैं प्रीप्रोसेसर की स्थिति में आकार का उपयोग क्यों नहीं कर सकता?

#if 4 == sizeof(int) 
    typedef int Int32; 
#endif 

(cygwin-जीसीसी 3.4.4 के साथ-साथ विजुअल C++ 6.0 रिपोर्ट त्रुटियों संकलन)

ऐसे उपयोग नहीं क्यों है: लेकिन यह ऐसा लगता है जैसे #if पूर्वप्रक्रमक निर्देश में नहीं किया जा सकता लगते हैं अनुमति? sizeof संकलन समय में मूल्यांकन किया जाता

उत्तर

19

क्योंकि है, जबकि निर्देशों मूल्यांकन किया जाता है से पहले संकलन, और बात यह है कि कि संकलक नहीं है करता है, तो यह क्या sizeof साधन नहीं समझ जाएगा।

+1

वास्तव में प्रीप्रोसेसिंग संकलन के दौरान होता है, बस पिछले चरणों में से एक में। बाद के चरण में 'आकार' का मूल्यांकन करना होता है। – sbi

+4

@ एसबी प्रीप्रोसेसिंग संकलन का हिस्सा नहीं है - संकलक आमतौर पर वास्तविक संकलन से पहले प्रीप्रोसेसर चलाता है, लेकिन आप संकलक को ऐसा करने के लिए निर्देश दे सकते हैं। रिचन का जवाब 100% सही है। – qrdl

+0

ठीक है, मैं गलत था, लेकिन केवल शब्दावली में: यह _translation_ के चरणों में से एक है। इस http://stackoverflow.com/questions/1476892/1479972#1479972 के अनुसार, "संकलन" नामक कोई चरण नहीं है, इसलिए इसका अर्थ क्या है व्याख्या के लिए खुला लगता है। – sbi

10

आकार एक सी ऑपरेटर है। आप प्रीप्रोसेसर निर्देशों में सी कोड का उपयोग नहीं कर सकते हैं। संकलन होने से पहले प्रीप्रोसेसर निर्देशों का मूल्यांकन किया जाता है।

+0

आपको उनका पहला मिला! –

+0

"==" एक ऑपरेटर भी है। रिचएन का जवाब समस्या मेरे लिए थोड़ा स्पष्ट है। – felix0322

+2

@ felix0322: प्रीप्रोसेसर का अपना '==' ऑपरेटर है, जो प्रीप्रोसेसर निर्देशों में उपयोग किया जाता है। – sbi

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