gpt4 book ai didi

c - 在c中使用#define初始化结构体数组

转载 作者:行者123 更新时间:2023-11-30 17:51:45 24 4
gpt4 key购买 nike

下面的代码给了我这个警告:

tag_info.h:17: warning: missing braces around initializer
tag_info.h:17: warning: (near initialization for âtag_list_data[0].subtagsâ)

我尝试了很多方法,但似乎没有任何效果。任何人都可以提出建议

typedef struct Attr{    
char attr_name[64];
value_type_t value;
int mandatory;
}Attr_t;

typedef struct Tags {
unsigned int tag_id;
Attr_t *attr_list;
char *tag_name;
int tag_type;
int subtags[html_subtag_num];
}Tags_t;

Tags_t tag_list_data[150] = {
#include "tag_info.h"
{0,0,0,0,0}
};

where the "tag_info.h" contains :
#if defined(TAG_DEFINE)
#undef TAG_DEFINE
#else
#define TAG_DEFINE(a,b,c,...) {.tag_id=a, .tag_name=#b, .tag_type=c, ##__VA_ARGS__}
#endif

TAG_DEFINE(0,TAG_NONE,0,0),
TAG_DEFINE(1,!--,0,0),
TAG_DEFINE(2,!doctype,0,0),
TAG_DEFINE(3,a, 1, 1, 117, 59,11,118,92,100),

最佳答案

您正在初始化子标签,就好像它是Tags结构的多个成员:

typedef struct Tags {
...
int subtags_0;
int subtags_1;
int subtags_2;
} Tags_t;

Tags_t t = { ..., 0, 1, 2 };

但它是一个数组。因此,您应该将其初始化为单个实体。

typedef struct Tags {
...
int subtags[html_subtag_num];
} Tags_t;

Tags_t t = { .tag_id = 0, ..., { 0, 1, 2 } };
// or
Tags_t t = { .tag_id = 0, ..., .subtags = { 0, 1, 2 } };

此外,您不需要使用串联 (##)

 #define TAG_DEFINE(a,b,c,...) { ..., ## __VA_ARGS__}

最后,它应该看起来像

 #define TAG_DEFINE(a,b,c,...) { ..., .subtags = { __VA_ARGS__ } }
...
Tags_t tag_list_data[150] = {
...
{ 0,0,0,0,{0}}
}

而不是

#define TAG_DEFINE(a,b,c,...) { ..., ##__VA_ARGS__}
...
Tags_t tag_list_data[150] = {
...
{ 0,0,0,0,0 }
}

关于c - 在c中使用#define初始化结构体数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16540719/

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