【问题标题】:Array initialisation warning数组初始化警告
【发布时间】:2010-06-08 12:59:38
【问题描述】:

我正在尝试为实际数据包有效负载初始化一个以数组 [0](此处为 char iedata[0])结尾的结构。如果我尝试内联初始化它,如下所示:

struct some_packet pkt = {
   .elem1 = blah, .elem2 = bleh,
   .iedata = {
      1, 2, 3, 4
   }
};

我收到来自 gcc 的警告:

warning: (near initialization for ‘pkt.iedata’)

有没有什么好的方法来标记这是一个正确的初始化?

【问题讨论】:

    标签: c arrays structure


    【解决方案1】:

    如果您能够在 C99 模式下编译,您可以尝试使用标准的灵活长度数组,而不是零长度 hack:http://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html

    请注意,在 GCC 3.0 和更新版本中,数组初始化程序中的额外条目将被丢弃(根据上面链接的文档)。

    【讨论】:

      【解决方案2】:

      当您使用 C99 初始化时,为什么不将成员设为正确的 FAM,即 char data[];

      使用 FAM(或 struct hack 成员)创建有效结构的唯一方法是为最后一个成员动态分配正确数量的多余存储空间,因此,正如警告所示,您的本地初始化无效。

      【讨论】:

        猜你喜欢
        • 2014-08-15
        • 2020-10-08
        • 1970-01-01
        • 2017-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多