【问题标题】:Designated initializers and omitted elements指定的初始化器和省略的元素
【发布时间】:2009-04-18 16:52:17
【问题描述】:

谁能解释一下关于指定初始化器的以下行:

初始化列表可以省略在聚合中任何地方声明的元素,而不仅仅是在末尾。

【问题讨论】:

    标签: c


    【解决方案1】:

    如果你使用传统的初始化列表,元素的值是按顺序分配的,所以如果你有这个结构:

    typedef struct _foo {
      int a;
      int b;
    } foo_t;
    

    然后这个初始化器显式分配a而不是b

    foo_t value = { 7 };
    

    没有指定的初始化器,唯一可以省略的元素是在末尾声明的元素

    使用指定的初始化器,您可以省略在任何地方声明的元素:

    foo_t value = { .b = 8 };
    

    所以value.a 的初始化器被省略了,尽管它是结构中的第一个值。

    【讨论】:

      【解决方案2】:

      试试这个link

      这个想法是能够在初始化期间引用复杂类型的成员,例如结构。例如

      struct s {
         int a, b;
      };
      
      int main() {
        struct s = { .b = 42, .a = -42 };
        return 0;
      }
      

      在指定值时与顺序无关,从而获得了灵活性。请记住,这是添加到 C99 标准中的,并且可能不受不完全支持 C99(或不支持该标准的早期版本)的编译器支持。

      【讨论】:

        猜你喜欢
        • 2014-04-22
        • 2011-07-12
        • 2023-04-09
        • 1970-01-01
        • 2014-07-27
        • 1970-01-01
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多