Vì vậy, tôi muốn có một định nghĩa về kích thước của một mảng trong một cấu trúc được biết đến tại thời gian biên dịch. Tôi cũng muốn số đó có sẵn dưới dạng biến để dễ sử dụng sau này. Những gì tôi có là như sau:cấu trúc mảng thành viên kích thước dựa trên const int trên các tập tin
const int BANANA_ARRAY_SIZE = 10;
typedef struct
{
char bananas[BANANA_ARRAY_SIZE];
int some_other_stuff;
} banana_struct;
Chức năng này tốt. Tuy nhiên, nếu tôi có nó trong một tập tin .h được bao gồm trong nhiều nơi, trình biên dịch than phiền về định nghĩa lại của BANANA_ARRAY_SIZE (có ý nghĩa). Vì vậy, tôi cần phải khai báo nó như là một extern để nhiều đơn vị biên dịch có thể biết về nó.
Vì vậy, bây giờ tôi có
extern const int BANANA_ARRAY_SIZE;
typedef struct
{
//.. same as before
} banana_struct;
và trong một tập tin thực hiện Tôi có
const int BANANA_ARRAY_SIZE = 10;
Nhưng bây giờ các trình biên dịch sẽ không cho phép tôi xác định struct nữa với khiếu nại của
fields must have a constant size: variable length array in structure
Có cách nào tôi có thể đạt được những gì tôi muốn (có chiều dài của mảng được lưu trữ trong biến và được sử dụng để xác định struct)?
Edit:
Để đối phó với những gợi ý để thay vì sử dụng #define
s, tôi không muốn.
Câu hỏi của tôi là về cách có giá trị không đổi này được lưu trữ trong một biến và cũng được sử dụng để đặt độ dài của một mảng trong cấu trúc. Nếu bạn cần biện minh thêm, giả sử tôi cần một hàm nhận một con trỏ tới một int. Không thể tham chiếu của #define.
Bạn rõ ràng chỉ có thể thực hiện loại khởi tạo này trong phạm vi địa phương trong C, chứ không phải phạm vi toàn cầu mà bạn đang cố gắng thực hiện. *** [ref] (http://stackoverflow.com/a/11541168/645128) *** và trong cùng một bài đăng: *** [ref2] (http://stackoverflow.com/a/11542474/645128) *** – ryyker
Vui lòng đọc nhận xét cập nhật của tôi, nhận xét cuối cùng về câu trả lời của tôi. Nó không xảy ra với tôi _gcc-5.1.0_. –
'#define BANANA_ARRAY_SIZE 10'' char chuối [BANANA_ARRAY_SIZE]; const size_t length = BANANA_ARRAY_SIZE; ' – chux