2011-07-31 10 views
11

सी/सी ++ में निरंतर 1 या 2 आयामी सरणी को परिभाषित करने के लिए कैसे? मैं एम्बेडेड प्लेटफ़ॉर्म (Xilinx EDK) से निपटता हूं, इसलिए संसाधन सीमित हैं।सी/सी ++ में निरंतर सरणी को परिभाषित करने के लिए कैसे?

मैं

#define MYCONSTANT 5 

लेकिन सरणी के लिए की तरह तीसरे पक्ष के हेडर फाइल में कुछ लिखने के लिए करना चाहते हैं।

#define MYARRAY(index) { 5, 6, 7, 8 } 

ऐसा करने का सबसे आम तरीका क्या है?

+0

मैक्रो आधारित पहले उदाहरण में उपयोग किए जाने वाले समाधान काम नहीं करेंगे। कहीं, एक वास्तविक सरणी स्मृति में आवंटित की जानी चाहिए, जैसा कि एसबीआई के उत्तर में –

+0

कृपया थोड़ा विस्तार करें। क्या निरंतर सरणी का मतलब है कि आप नहीं चाहते कि सरणी को बाद के चरण में बदल दिया जाए या कुछ और। –

+0

@ आदित्य कुमार - यह सही है। मैं अलग-अलग फाइलों में स्थिरांक के सेट को परिभाषित करना चाहता हूं और मुख्य स्रोत फ़ाइल से पूर्णांक अनुक्रमणिका का उपयोग करके उन्हें एक्सेस करना चाहता हूं। –

उत्तर

18

सी ++ स्रोत फ़ाइल

extern "C" const int array[] = { 1, 2, 3 }; 

हेडर फाइल में दोनों C और C++ स्रोत फ़ाइल

#ifdef __cplusplus 
extern "C" { 
#endif 
extern const int array[]; 
#ifdef __cplusplus 
} 
#endif 
17

सी ++, एक निरंतर सरणी निश्चित रूप से करने के लिए किया जाना चाहिए परिभाषित करने के लिए सबसे आम तरीका, ईआरएम, एक निरंतर सरणी परिभाषित में:

const int my_array[] = {5, 6, 7, 8}; 

आप ग्रहण करने के लिए कि वहाँ कुछ समस्या हो सकता है किसी भी कारण है उस एम्बेडेड मंच पर?

+1

ठीक है। और इसे कहां परिभाषित किया जाए - हेडर/स्रोत फ़ाइल? जब मैं इसे थर्ड-पार्टी एच फ़ाइल में परिभाषित करता हूं (यह माइक्रोप्रोसेसर सिस्टम के लिए एक अलग ड्राइवर है) - मुझे एक त्रुटि मिलती है - कुछ "इस चर को कई बार परिभाषित नहीं किया जा सकता"। –

+0

जब मैं इसे स्रोत फ़ाइल में परिभाषित करता हूं - इसे main.cc फ़ाइल से एक्सेस नहीं किया जा सकता है (जिसमें मैं mydriver.h शामिल करता हूं) –

+2

तो आप सी में लिख रहे हैं? आपने उन कुछ क्षेत्रों को चुनने में कामयाब रहे हैं जहां एक ही कोड सी और सी ++ में अलग-अलग काम करेगा, इसलिए कृपया स्रोत फ़ाइल कॉन्स्ट int array [] = {1, 2, 3} में कौन सी भाषा – jahhaj

4

C++ में

const int array[] = { 1, 2, 3 }; 

काफी आसान था, लेकिन शायद मैं आपके सवाल का सही ढंग से समझ नहीं कर रहा हूँ कि। उपरोक्त सी में काम नहीं करेगा, कृपया निर्दिष्ट करें कि आप वास्तव में किस भाषा में रुचि रखते हैं। सी/सी ++ जैसी कोई भाषा नहीं है।

+0

यह सी में क्यों काम नहीं करता है? मैंने सोचा कि सी ने सी ++ से 'कॉन्स' की प्रतिलिपि बनाई है, मुझे लगता है कि सी 8 9? – sbi

+0

यदि इसे हेडर फ़ाइल में रखा गया था और उस हेडर फ़ाइल को एक से अधिक स्रोत फ़ाइल में शामिल किया गया था, तो सी में आपको कई परिभाषा त्रुटियां मिलेंगी, सी ++ में आप नहीं करेंगे। सी और सी ++ में कॉन्स का बिल्कुल वही अर्थ नहीं है। – jahhaj

+0

विशिष्ट होने के लिए - मेरे आवेदन में 2 भागों के सामान्य होते हैं - सी ++ में लिखे गए मुख्य कार्यक्रम और शुद्ध सी में लिखे गए परिधीय कोर सॉफ़्टवेयर ड्राइवर (क्योंकि इसे बोर्ड समर्थन पैकेज के हिस्से के रूप में संकलित किया जाता है)। –

1

परिभाषित निर्देश का उपयोग करके array निरंतर परिभाषित करना असंभव है।

0

मैं एक ऐसी ही समस्या पड़ा है में शामिल किया जाना। मेरे मामले में, मुझे अन्य स्थैतिक सरणी के आकार के रूप में उपयोग करने के लिए स्थिरांक की एक सरणी की आवश्यकता थी। जब मैं

const int my_const_array[size] = {1, 2, 3, ... }; 

का उपयोग करें और करने की कोशिश की तो घोषित:

int my_static_array[my_const_array[0]]; 

मैं अपने संकलक से कोई त्रुटि मिलती है:

array bound is not an integer constant 

तो, अंत में मैं निम्नलिखित था (हो सकता है कि देखते हैं ऐसा करने के लिए और अधिक सुरुचिपूर्ण तरीके):

#define element(n,d) ==(n) ? d : 
#define my_const_array(i) (i) element(0,1) (i) element(1,2) (i) element(2,5) 0 
संबंधित मुद्दे