首页 > 解决方案 > C89 中的结构初始化

问题描述

我只能初始化这个结构数组的第二个元素。我不能使用像指定初始化器这样的 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 个元素。

标签: c

解决方案


这个 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;
}

推荐阅读