gpt4 book ai didi

c - 结构宏

转载 作者:太空宇宙 更新时间:2023-11-04 00:51:59 24 4
gpt4 key购买 nike

我有一个结构

typedef struct lzma_next_coder_s lzma_next_coder;

struct lzma_next_coder_s {
lzma_coder *coder;
lzma_vli id;
uintptr_t init;
lzma_code_function code;
lzma_end_function end;
lzma_check (*get_check)(const lzma_coder *coder);
lzma_ret (*memconfig)(lzma_coder *coder, uint64_t *memusage,
uint64_t *old_memlimit, uint64_t new_memlimit);
lzma_ret (*update)(lzma_coder *coder, lzma_allocator *allocator,
const lzma_filter *filters,
const lzma_filter *reversed_filters);
};

宏如下:

#define LZMA_NEXT_CODER_INIT \
(lzma_next_coder){ \
.coder = NULL, \
.init = (uintptr_t)(NULL), \
.id = LZMA_VLI_UNKNOWN, \
.code = NULL, \
.end = NULL, \
.get_check = NULL, \
.memconfig = NULL, \
.update = NULL, \
}

这是电话

lzma_next_coder *next;

next = LZMA_NEXT_CODER_INIT; 第 210 行

主要目的是用 NULL 初始化 next 结构。

但我收到了 error C2059: syntax error : '{'error C2143: syntax error : missing ';'在第 210 行的“{” 之前

我正在使用 Visual Studio 2010 进行编译。我猜 VS 不识别 .coder=NULL 风格的语法。我还写了一个函数(而不是宏),我在其中用 NULL 初始化结构成员。

lzma_next_coder make_null_lzma()
{
lzma_next_coder temp;
temp.coder = NULL;
//other members
return temp;
}
next = make_null_lzma();

错误现在消失了,但我遇到了运行时崩溃。我做得对吗? next 真的用 NULL 初始化了吗?还是我搞砸了?

谢谢

最佳答案

错误消息的格式就像它们来自 MSVC 一样。 MSVC 不支持 C99;您使用的结构是 C99 而不是 MSVC 支持的 C89。

您要么需要找到一个 C99 编译器(建议使用 GCC 编译器,例如 Cygwin 或 MinGW),要么放弃复合文字和指定初始值设定项的便利性。

功能版本应该可以正常工作。您可以通过打印出初始化的结构来检查您是否已经初始化了所有内容。我假设在函数定义和它在 temp 的赋值中的使用之间还有一些其他代码。

关于c - 结构宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15426198/

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