gpt4 book ai didi

c - 初始化一个结构体

转载 作者:行者123 更新时间:2023-11-30 15:35:06 25 4
gpt4 key购买 nike

我正在尝试初始化一个结构,但在 C 中收到以下错误消息:

error: initializer element is not constant

error: (near initialization for 'resource01.resource.role')

对于 URL 来说它可以工作,只是角色不起作用。首先,我有一个角色指针,并分配了变量的地址。我删除了指针,因为我不需要它,而且我不能只为变量分配一个值。我做错了什么?

static char const resource01Url[] = "/dummy";
static int const resource01Role = 2;
static struct RestResourceNode_S resource01 =
{
{
resource01Url,
resource01Role,
&DummyHandler_call
},
NULL
};

static struct RestResourcesManager_S resourcesManager =
{
&resource01, &resource01
};

类型 RestResourceNode_S 定义:

struct RestResourceNode_S
{
RestResource_T resource;
struct RestResourceNode_S const *next;
}

RestResource_t:

struct RestResource_S
{
char const *url;

int const role;

retcode_t (*handle)(Msg_T *);
};

typedef struct RestResource_S RestResource_T;

最佳答案

C99 标准 §6.7.8 ¶4 表示

All the expressions in an initializer for an object that has static storage duration shall be constant expressions or string literals.

此外,const 在 C 中不是真正的常量,因为它们不是编译时常量。这意味着在具有静态存储分配的结构的初始值设定项中不能有常量对象。但是,如果您的结构具有自动存储分配功能,则这可以正常工作。

您可以做的是将 const 对象定义为宏 -

#define resource01Url "/dummy"
#define resource01Role 2

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

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