将C代码和结构初始化和分配移动到C 编译器

Move C code with struct initialization and assignment to c++ compiler

本文关键字:移动 编译器 分配 结构 代码 初始化      更新时间:2023-10-16

为什么在c 中声明结构时没有直接的评估?我有以下C代码,无法与C 编译器一起使用:

static const struct {
    struct structtype1 header;
    struct {
        struct structtype2 intf;
        struct structtype3  src;
    }  foo1, foo2;
}  bar = {
    .header = {
        .byte1 = 0x23,
        .length = 12,
        .count1 = 4,
        .count2 = 4,
    },
    .foo1= {
        .intf = {
            .data =  0x23,
            .len = 2,
            .ep = 3,
                },
        .src= {
            .data =  0x21,
            .len = 4,
            .ep = 2,
        },
        },
        .foo2= {
        .intf = {
            .data =  0x17,
            .len = 11,
            .ep = 2,
                },
        .src= {
            .data =  0x20,
            .len = 2,
            .ep = 1,
        },
        },
};

您有两个选择:

1.使用该构建器

  • 这将定义成员的值,但所有结构都是相同的

    struct _pnt { int x,y,z;  _pnt() { x=0; y=0; z=0; } };
    _pnt p0,p1,p2;  // all points are initialized to (0,0,0)
    

2.使用定义照常,它仍然可以在我使用的任何C 编译器中都起作用

  • 我认为这就是您想要的
  • 不要忘记成员的顺序与声明中的相同!!!

    struct _pnt { int x,y,z; };
    _pnt p0={0.0,0.0,0.0},
         p1={1.0,0.0,0.0},
         p2={0.0,1.0,0.0};
    
  • 问题是您必须启动所有成员,而不仅仅是一些成员!