2010-08-06 33 views
8

Giả sử tôi muốn chia sẻ một mảng toàn cầu của dữ liệu qua chương trình của tôi, ví dụ:Làm thế nào để viết chính xác các khai báo mảng ngoài (và mảng kép) trong các tệp tiêu đề của C?

int lookup_indexes[] = { -1, 1, 1, -1, 2, 1, 1, -2, 2, 2, -1, 1, 1, 2 }; 

đúng extern khai cho mảng này trong file header C là gì?

Ngoài ra những gì về một mảng như thế này:

int double_indexes[][5] = { { -1, 1, 1, -1, 1 }, { 2, -2, 2, 1, -1 } }; 

Trong tập tin tiêu đề của tôi, tôi đã cố gắng này:

extern int lookup_indexes[]; 
extern int double_indexes[][5]; 

Nhưng kết quả này trong các lỗi biên dịch:

water.h:5: error: array type has incomplete element type 

tôi có thể không tìm ra.

Cảm ơn, Boda Cydo.

+0

Bạn có thể gửi nội dung của 'water.h' ít nhất lên đến dòng 5 và chương trình mà dòng gây ra lỗi. –

+0

Charles, đó là #ifndef, #define, một dòng mới và 'extern int lookup_indexes [];' (dòng thứ tư) và 'extern int double_indexes [] [5];' (dòng thứ 5). – bodacydo

+0

anh ấy muốn đặt câu hỏi đó vào câu hỏi của bạn. Chỉ cần thêm nó. – detly

Trả lời

6

This liên kết thảo luận về các vấn đề với mảng và kích thước được sử dụng như extern và cách quản lý chúng.

  1. Khai báo một biến đồng hành, có chứa kích thước của mảng, định nghĩa và khởi tạo (với sizeof) trong file nguồn cùng nơi mảng được định nghĩa
  2. xác định một hằng số biểu hiện cho kích thước để nó có thể được sử dụng một cách nhất quán trong định nghĩa và khai báo extern

  3. sử dụng một số giá trị trọng điểm (thường là 0, -1, hoặc NULL) trong phần tử cuối cùng của mảng, do đó, mã đó có thể xác định cuối cùng mà không có một kích thước chỉ rõ ràng
+0

+1 để đề cập đến kích thước mảng. Trình biên dịch đơn giản không có thông tin về kích thước của mảng nếu nó không được khai báo rõ ràng trong tệp tiêu đề – chrmue

+0

Tôi không tin đây là vấn đề hoặc câu hỏi của OP: Anh ta không muốn biết kích thước của mảng của mình, anh ta chỉ muốn khai báo chúng đúng cách. Liên kết C-FAQ luôn luôn là tốt tất nhiên. – schot

2

Mã bạn đăng có vẻ tốt với tôi và biên dịch (gcc -std=c99 -pedanticgcc -std=c90 -pedantic) trên máy của tôi. Bạn đã sao chép các dòng này hay có thể bạn đã đánh máy trong tiêu đề thực của mình chưa?

Ví dụ lỗi chính tả mà có thể gây ra lỗi của bạn (phỏng đoán tinh khiết):

extern int double_indexes[][]; /* forgot the 5 */ 
extern int double_indexes[5][]; /* [] and [5] swapped */ 
+0

Cảm ơn, Hãy để tôi xác minh. – bodacydo

Các vấn đề liên quan