gpt4 book ai didi

c - 在 C 中设置结构 - 给出奇怪的错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:57:16 26 4
gpt4 key购买 nike

我在 C 程序中设置了这样的结构:

typedef struct header block_header;

struct header {
size_t size;
block_header *next_pointer;
block_header *prev_pointer;
};

但是,当我运行如下任何表达式时:

int myinit()
{
block_header *p = init_heap_segment(BLOCK_HEAD_SIZE);

// etc etc
}

对于它声明的每个函数,它都给我几个错误:

allocator.c: In function ‘myinit’:
allocator.c:37:38: error: ‘header’ undeclared (first use in this function)
allocator.c:37:38: note: each undeclared identifier is reported only once for each function it appears in
allocator.c: In function ‘function’:
allocator.c:67:2: error: unknown type name ‘header’

它的设置方式有什么问题?如何消除这些错误?

编辑:定义:

#define BLOCK_HEAD_SIZE (ALIGN(sizeof(header)))

最佳答案

这是你的问题

#define BLOCK_HEAD_SIZE (ALIGN(sizeof(header)))

在你的程序中没有header这样的类型,这是编译器告诉你的。您已经定义了类型 struct header 并且您已经为其定义了一个 typedef 名称 block_header。因此,选择您喜欢的任何一个:sizeof(struct header)sizeof(block_header)。但不是 sizeof(header)

在 C++ 语言中,定义一个 struct header 类型也会在程序中引入 typename header。但在 C 中不是。在 C 中,struct header 定义的类型称为 struct header - 两个词。它不能缩短为仅仅是 header

关于c - 在 C 中设置结构 - 给出奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293542/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com