我正在尝试初始化一个以数组[0](此处为char iedata[0]
)结尾的结构,用于实际的数据包有效负载。如果我尝试内联初始化,就像这样:
struct some_packet pkt = {
.elem1 = blah, .elem2 = bleh,
.iedata = {
1, 2, 3, 4
}
};
我从gcc收到警告:
warning: (near initialization for ‘pkt.iedata’)
有没有好的方法来表明这是一个正确的初始化?
答案 0 :(得分:1)
如果你能够在C99模式下编译,你可以尝试使用标准的灵活长度数组而不是零长度黑客:http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html
请注意,在GCC 3.0及更新版本中,数据初始化程序中的额外条目将被丢弃(根据上面链接的文档)。
答案 1 :(得分:1)
当您使用C99初始化时,为什么不使该成员成为正确的FAM,即char数据[];
使用FAM(或结构黑客成员)创建有效结构的唯一方法是为最后一个成员动态分配正确数量的超额存储,因此,如警告所示,您的本地初始化无效。