Monday 15 April 2013

performance - C typedef enum compilation -


typedef enum का उपयोग करता है {VALUE_1 = 0x00, ...} typeName; typedef अहस्ताक्षरित चार प्रकार नामान; करने के अलावा और फिर केवल #define VALUE_1 0x00 के साथ प्रत्येक मान को परिभाषित करते हुए सी (विशेष रूप से, एवीआर MCU के लिए एवीआर-जीसीसी का प्रयोग करके संकलित) P>

मेरा विशिष्ट एप्लिकेशन स्थिति कोड है जो फ़ंक्शन द्वारा लौटा और चेक किया जा सकता है। यह typedef enum शैली का उपयोग करने के लिए मेरे लिए निपुण लगता है, लेकिन मैं यह सुनिश्चित करना चाहता था कि यह संकलित एप्लिकेशन पर किसी भी महत्वपूर्ण ऊपरी भाग को नहीं जोड़ा जा रहा है।

नहीं मान, लेकिन मैं वास्तव में यकीन नहीं था। मैंने इसी तरह के प्रश्नों को देखने की कोशिश की लेकिन उनमें से अधिकतर सी ++ से संबंधित है और सी ++ के लिए अधिक विशिष्ट जवाब मिल गए हैं।

एक enum घोषणा एक एन्यूमरेट की गई प्रकार बनाता है ऐसा एक प्रकार कुछ पूर्वनिर्धारित पूर्णांक प्रकार के साथ (और इसलिए एक जैसा आकार और प्रतिनिधित्व होता है) के साथ संगत है, लेकिन कंपाइलर एक को चुनता है।

लेकिन गणन स्थिरांक हमेशा int । (यह सी ++ से भिन्न है, जहां स्थिरांक एन्यूमरेटेड प्रकार के हैं।)

तो typedef अहस्ताक्षरित चार ... बनाम। typedef enum ... संभवतः प्रकार का आकार और प्रतिनिधित्व बदल जाएगा, जो कि यदि आप उस प्रकार या फ़ंक्शन के ऑब्जेक्ट को परिभाषित करते हैं, जो कि प्रकार वापस देता है, लेकिन स्थिरांक VALUE_1 एट अल int किसी भी तरह से हो सकता है।

यह enum प्रकार का उपयोग करने के लिए सबसे अच्छा है; इस तरह से संकलक यह तय कर सकता है कि प्रतिनिधित्व क्या सबसे अच्छा है। अहस्ताक्षरित चार को निर्दिष्ट करने का आपका विकल्प भंडारण को कम करता है, लेकिन प्लेटफॉर्म पर निर्भर करता है कि यह वास्तव में int के साथ संगत कुछ का उपयोग करके, वस्तुओं के उपयोग से धीमा हो सकता है।

संयोग से, typedef सख्ती से आवश्यक नहीं है यदि आप चाहें, तो आप टैग का उपयोग कर सकते हैं:

  enum typeName {value_1 = 0x00, ...};   

लेकिन फिर आपको बस typeName के बजाय के रूप में टाइप करने के लिए enum typeName का संदर्भ देना होगा। typedef का लाभ यह है कि यह आपको एक ऐसा नाम देता है जो सिर्फ एक ही पहचानकर्ता है।

No comments:

Post a Comment