0

以下代码给了我这个警告:

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),
4

1 回答 1

0

您正在初始化subtags,就好像它是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 }
}
于 2013-05-14T12:20:05.110 回答