Как ссылка на эту структуру? А что такое двоеточия (:) внизу?

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

Что мне интересно, так это то, для чего знак равенства используется внизу, и почему стоит двоеточие, а затем значение?

1

Решение

Эта форма инициализации выглядит как расширение 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 тип которого является анонимной структурой и инициализирует ее (ее членов) значениями.

3

Другие решения

Других решений пока нет …