2011-05-25 14 views
6

निम्न कोड संकलित नहीं होगा:संकलन त्रुटि C2099: प्रारंभकर्ता स्थिर नहीं है

const int a = 0; 

struct Test 
{ 
    int b; 
}; 

static const struct Test test = 
{ 
    a 
}; 

यह वास्तव में क्या करने की कोशिश कर रहा है इसका एक कट उदाहरण है, लेकिन मैं क्या गलत कर रहा हूं?

+0

क्या आपने इसे अलग परियोजना में संकलित करने का प्रयास किया था? मुझे सही लगता है। –

उत्तर

11

सी भाषा के सी 8 9/9 0 संस्करण में सभी समेकित प्रारंभकर्ताओं में स्थिरांक शामिल होना चाहिए। सी भाषा शब्दावली में स्थिरint प्रकार का एक शाब्दिक मूल्य है, जैसे 10, 20u, 0x1 आदि। एनम सदस्य भी स्थिर हैं। const int प्रकार के वेरिएबल सी में स्थिरांक हैं। आप कुल प्रारंभकर्ता में const int चर का उपयोग नहीं कर सकते हैं।

C99 में (इस कारण से, सी भाषा में, जब आप एक निरंतर नामित आप या तो #define या enum, लेकिन नहीं const क्वालीफायर का उपयोग करना चाहिए घोषित करने के लिए की जरूरत है। के लिए) कुल initializers के लिए इस आवश्यकता को आराम था। स्थानीय वस्तुओं के कुल प्रारंभकर्ताओं में गैर-स्थिरांक का उपयोग करना अब ठीक है। हालांकि, स्थैतिक वस्तुओं के लिए (जैसा कि आपके उदाहरण में) आवश्यकता अभी भी है। तो, C99 में भी you'l 'या तो

#define a 0 

का उपयोग करें या एक enum निरंतर नामित के रूप में @R में सुझाव दिया उपयोग करने के लिए .. के जवाब।

+1

+1, मेरे उत्तर से अधिक पूर्ण, भले ही कुछ बिंदुओं पर थोड़ा सा बंद हो। हो सकता है कि आप "स्थिरता" के बजाय वाक्यांश "स्थिर अभिव्यक्ति" का उपयोग करना चाहें, क्योंकि पूर्व में सी भाषा में आधिकारिक परिभाषा है, और यह स्पष्ट करता है कि जटिल अभिव्यक्ति तब तक आवश्यकता को पूरा कर सकती हैं जब तक कि उनके घटक घटक पर्याप्त रूप से "पर्याप्त रूप से" लगातार"। –

6

a निरंतर अभिव्यक्ति नहीं है। यह const -क्वॉलीफाइड वैरिएबल है। यदि आप एक प्रतीकात्मक नाम चाहते हैं जिसे आप निरंतर अभिव्यक्तियों में उपयोग कर सकते हैं, तो आपको या तो प्रीप्रोसेसर मैक्रो (#define a 0) या एनम (enum { a = 0 };) की आवश्यकता है।

+4

एक नोट के रूप में - यह सी ++ में अलग है, जो आपको अन्य निरंतर अभिव्यक्तियों में निरंतर अभिव्यक्तियों के साथ प्रारंभ किए गए 'कॉन्स्टेबल योग्य पूर्णांक चर का उपयोग करने देगा। –

+0

नोट किया गया। क्या यह जावा और सी # में भी अलग है? पायथन के बारे में कैसे? या लिस्प? ;-) –

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