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 に答える