static struct {
uint16_t foo;
uint16_t bar;
uint16_t foo1;
uint16_t bar1;
} foo_bar = {
foo : 1500,
bar : 1500,
foo1 : 1500,
bar1 : 1500
};
Что мне интересно, так это то, для чего знак равенства используется внизу, и почему стоит двоеточие, а затем значение?
Эта форма инициализации выглядит как расширение 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
тип которого является анонимной структурой и инициализирует ее (ее членов) значениями.
Других решений пока нет …