Инициализация структуры в C89 - PullRequest
0 голосов
/ 25 сентября 2019

Я могу только инициализировать второй элемент этого массива структур.Я не могу использовать функции c99, такие как обозначенные инициализаторы , так как мне инициализировать 0-й элемент этого массива структур?

static uint8_t HEAP_P[32];

struct free_entry
{
    uint8_t *ptr;
    uint64_t size;  
};

typedef struct free_entry free_entry_t;

static free_entry_t free_list[32] = 
{
    {HEAP_P, 64}, //i need to initialize 0-th element to: {ptr = HEAP_P, size = 32}
};

ОШИБКА: free_entry не определено.

Но когда я делаю это:

static free_entry_t free_list[32] = 
    {
        {0},
        {HEAP_P, 64}, 
    };

, тогда все работает, за исключением того, что мне нужно инициализировать 0-й элемент, а не 1-й.

1 Ответ

4 голосов
/ 25 сентября 2019

Этот typedef неверен

typedef free_entry free_entry_t;

Вы должны написать

typedef struct free_entry free_entry_t;

Я думаю, что это является причиной ошибки.

Этот код успешно скомпилирован

#include <stdio.h>
#include <stdint.h>

static uint8_t HEAP_P[32];

struct free_entry
{
    uint8_t *ptr;
    uint64_t size;  
};

typedef struct free_entry free_entry_t;

static free_entry_t free_list[32] = 
{
    {HEAP_P, 64}, //i need to initialize 0-th element to: {ptr = HEAP_P, size = 32}
};

int main(void) 
{
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...