[英]Is there a shorter way to initialize an array of structs?
我有一個這樣的“緩沖區緩沖區”:
#define BUFFER_MESSAGE_COUNT 5
unsigned char buffer_data[BUFFER_MESSAGE_COUNT][128];
typedef struct {
unsigned char *data;
int size;
int cursor;
} t_buffer;
typedef struct {
int cursor;
int size;
t_buffer buffers[BUFFER_MESSAGE_COUNT];
} t_message_buffer;
t_message_buffer message_buffer = {
0,
BUFFER_MESSAGE_COUNT,
{
{ buffer_data[0], sizeof(buffer_data[0]) / sizeof(char), 0 },
{ buffer_data[1], sizeof(buffer_data[1]) / sizeof(char), 0 },
{ buffer_data[2], sizeof(buffer_data[2]) / sizeof(char), 0 },
{ buffer_data[3], sizeof(buffer_data[3]) / sizeof(char), 0 },
{ buffer_data[4], sizeof(buffer_data[4]) / sizeof(char), 0 }
}
};
有沒有比給出所有元素更短/更好的方法來聲明和初始化它?
我正在使用Microchip XC8編譯器,但問題可能是普遍的。
我假設您在大小很重要的環境中(需要更改)。
如果是這樣,我不太確定這是初始化RAM結構的有效方法。
這將迫使編譯器為主主靜態變量初始化分配相同數量的ROM。
由於結構的內容似乎很多余,因此使用初始化函數在資源使用方面可能會更高效,並且肯定比初始化宏更具可讀性和改進性。
在所有條件都相同的情況下,我只想使用一個初始化函數。
您使用的方法很好,但是適應性不是很好。 for
循環會更好:
t_message_buffer message_buffer;
message_buffer.cursor = 0;
message_buffer.size = BUFFER_MESSAGE_COUNT;
for(int i = 0; i < BUFFER_MESSAGE_COUNT; i++)
{
message_buffer.buffers[i].data = buffer_data[i];
message_buffer.buffers[i].size = sizeof(buffer_data[i]);
message_buffer.buffers[i].cursor = 0;
}
這樣,如果BUFFER_MESSAGE_COUNT
的值發生更改,則無需在代碼中調整很多位置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.