2011-12-20 8 views

उत्तर

15

आप कम से कम, 2-डी सरणी के लिए सही-कॉलम आकार को शामिल करने की आवश्यकता है। आप इस तरह यह घोषणा कर सकते हैं:

extern unsigned char LCD[][64]; 

अन्यथा संकलक गणना करने के लिए पहली पंक्ति के बाद ऑफसेट में सक्षम नहीं होगा।

extern unsigned char LCD[8][64]; 
0

हेडर फाइल करने के लिए की तरह एक घोषणा जोड़ें। इसलिए, संकलक को यह जानने की जरूरत है कि पहले को छोड़कर आयामों में से प्रत्येक कितना बड़ा है। तो, यह स्थिति को सुधारने के लिए, कुछ इस तरह करते हैं:

LCD.h:

#define MINOR 64 
extern unsigned char LCD[][MINOR]; 

LCD.c:

unsigned char LCD[8][MINOR] = {((unsigned char)0)}; 

(संपादित करें: माफ करना, मैं में गड़बड़ शुरुआत में बातें , इसे अभी तय किया गया है।)

2

सी में एक सरणी उसके आयाम में से हर एक के आकार के बारे में जानकारी शामिल नहीं है:

+0

'एलसीडीएच' में 'एलसीडीएच' 'एलसीडीएच' में तनाव डालने के लिए उपयोगी हो सकता है (इसलिए 'MINOR' मैक्रो को हेडर फ़ाइल में केवल एक बार परिभाषित किया जाता है) ताकि 'एलसीडी' के बीच विरोधाभासी प्रकारों की संभावना को बाहर करने के लिए घोषणा और वास्तविक परिभाषा (जिसे संकलन त्रुटि के रूप में नहीं मिला है जब वे अलग-अलग फाइलों और लिंकर त्रुटि में हैं)। –

+1

मैंने सोचा कि जब भी किसी प्रोजेक्ट में XYZ.h और XYZ.c दोनों होते हैं, तो यह एक सार्वभौमिक नियम और सुरक्षित शर्त है कि XYZ.c XYZ.h सहित होगा, नहीं? –

+1

हां, आप सही हैं, लेकिन इसकी पुष्टि करने के लिए हमेशा बेहतर (उदाहरण के लिए कुछ नौसिखिया प्रोग्रामर, जो एसओ पढ़ रहे हैं)। –

1

बहुआयामी सरणी के साथ, पहले आयाम के अलावा सभी को निर्दिष्ट किया जाना चाहिए। तो ...

extern unsigned char LCD[][64]; 

इसे करना चाहिए।

2

सरणी के आयाम निर्दिष्ट करने का प्रयास करें। एक बहुआयामी सरणी के लिए सी में केवल एक आयाम को निर्दिष्ट नहीं किया जा सकता है।

इस तरह:

extern unsigned char LCD[][64]; 
0

sizeof एलसीडी सरणी के अगर आप दो आयाम के आकार को परिभाषित नहीं किया इनकार कर दिया जाएगा!

sizeof refused : extern unsigned char LCD[][64]; 
sizeof accepted : extern unsigned char LCD[8][64]; 

यह निर्भर करता है कि आप क्या चाहते हैं!

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