2012-04-24 16 views
6

क्या उद्देश्य सी में रनटाइम के दौरान मानों को मान निर्दिष्ट करने का कोई तरीका है? मेरे पास कई enums हैं और चाहते हैं कि प्रत्येक enum के पास कुछ मूल्य हो। मानों को xml फ़ाइल से पढ़ा जा सकता है। क्या इसे करने का कोई तरीका है?रनटाइम पर enum मान बदलें?

उत्तर

16

दुर्भाग्यवश, @Binyamin सही है, तो आप एक enum के साथ ऐसा नहीं कर सकते।

int count = sizeof(MyEnumValues)/sizeof(MyEnum); 
MyEnum *values = (MyEnum *) &MyEnumValues; 

for (int i = 0; i < count; i++) 
{ 
    printf("Value %i is: %i\n", i, values[i]); 
} 

: यह भी मान के माध्यम से पुनरावृति करने के लिए है, जो एक सामान्य enum साथ संभव नहीं है में सक्षम होने का लाभ दिया है

// in .h 
typedef int MyEnum; 

struct { 
    MyEnum value1; 
    MyEnum value2; 
    MyEnum value3; 
} MyEnumValues; 

// in .m 
__attribute__((constructor)) 
static void initMyEnum() 
{ 
    MyEnumValues.value1 = 10; 
    MyEnumValues.value2 = 75; 
    MyEnumValues.value3 = 46; 
} 

: इस कारण से, मैं आमतौर पर अपनी परियोजनाओं में निम्न कार्य करें सब कुछ, यह सी

+0

@ रिचर्ड..क्या आप कृपया बता सकते हैं कि __attribute __ ((कन्स्ट्रक्टर) क्या है) .. उत्तर के लिए धन्यवाद –

+1

@learningDroid यह एक है जीसीसी एक्सटेंशन, जो आपको एक फ़ंक्शन बनाने की अनुमति देता है जिसे लक्ष्य भार से पहले कहा जाता है (एक डाइलिब में, यह एक आवेदन में, डिलिब से पहले फ़ंक्शन चलाए जाने से पहले होगा, यह 'मुख्य() 'से पहले है) । एक बहुत ही उपयोगी निर्माण, और जब तक आप इसमें भारी भार नहीं उठाते, आपको ठीक होना चाहिए। –

+0

मैं एक एक्सएमएल फ़ाइल पढ़ने और एक संरचना में enums के लिए मान असाइन करने की योजना बना रहा हूँ। क्या आपको लगता है कि यह __attribute विधि –

5

नहीं, संकलन समय पर जानकारी जानकारी मिटा दी गई है।

+4

दुर्भाग्य से यह मामला है। हालांकि आप जानकारी को पकड़ना चाहते हैं तो आप एक enum के बजाय एक स्ट्रक्चर का उपयोग कर सकते हैं .. –

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