1
static struct {
    uint16_t foo;
    uint16_t bar;
    uint16_t foo1;
    uint16_t bar1;
} foo_bar = {
    foo  : 1500,
    bar  : 1500,
    foo1 : 1500,
    bar1 : 1500
};

我想知道底部使用等号是什么,为什么有一个冒号,然后是一个值?

4

1 回答 1

3

这种初始化形式似乎是 GNU 扩展。clang++告诉我:

quirk.cpp:10:5: warning: use of GNU old-style field designator extension [-Wgnu-designator]

与此等效的标准(至少在 C99 中,而不是 C++ 中)是以下.field = <expr>语法:

static struct {
    uint16_t foo;
    uint16_t trim2;
    uint16_t foo1;
    uint16_t bar1;
} elevon = {
    .foo = 1500,
    .trim2 = 1500,
    .foo1 = 1500,
    .bar1 = 1500
};

所以,这段代码所做的就是声明和初始化elevon类型为匿名结构的变量,并用值初始化它(它的成员)。

于 2013-06-14T16:18:39.980 回答