簡體   English   中英

有沒有更短的方法來初始化結構數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM