2011-12-20 6 views

Trả lời

15

Bạn cần, ở mức tối thiểu, để bao gồm kích thước cột bên phải nhất cho một mảng 2-D. Bạn có thể khai báo nó như sau:

extern unsigned char LCD[][64]; 

Nếu không trình biên dịch sẽ không thể tính toán bù trừ sau hàng đầu tiên.

0

Thêm vào các tập tin tiêu đề một bản tuyên bố như:

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

Trong C một mảng không chứa thông tin về kích thước của mỗi người trong các kích thước của nó. Do đó, trình biên dịch cần biết mức độ lớn của mỗi kích thước trừ thứ nguyên đầu tiên. Vì vậy, để khắc phục tình trạng này, làm một cái gì đó như thế này:

LCD.h:

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

LCD.c:

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

(EDIT: xin lỗi, tôi sai lầm thứ trong đầu , hãy sửa nó ngay bây giờ.)

+0

Có thể hữu ích khi nhấn mạnh '#include" LCD.h "' thành 'LCD.c' (vì vậy macro' MINOR' chỉ được xác định một lần trong tệp tiêu đề) để loại trừ khả năng loại xung đột cho 'LCD' giữa khai báo và định nghĩa thực tế (không được phát hiện là lỗi biên dịch khi chúng nằm trong các tệp khác nhau và lỗi trình liên kết). –

+1

Tôi nghĩ rằng bất cứ khi nào một dự án chứa cả XYZ.h và XYZ.c, nó là khá nhiều quy tắc chung và đặt cược an toàn XYZ.c sẽ bao gồm XYZ.h, không? –

+1

Vâng, bạn có quyền, nhưng càng tốt để xác nhận nó (ví dụ: đối với một số lập trình viên mới làm quen, đang đọc SO). –

1

Với mảng đa chiều, tất cả trừ thứ nguyên đầu tiên phải được chỉ định. Vì vậy ...

extern unsigned char LCD[][64]; 

Nên làm điều đó.

2

Thử chỉ định kích thước của mảng. Trong C cho một mảng đa chiều, chỉ một thứ nguyên có thể không được chỉ định.

Như thế này:

extern unsigned char LCD[][64]; 
0

sizeof của mảng LCD sẽ từ chối nếu bạn không xác định kích thước của hai chiều!

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

tùy theo ý bạn muốn!