Green1
27.Февраль.2026 06:52:40
1
Вижу похожие темы. Но там всё накручено, у меня же примитивщина.
Почему я не могу по людски инициализировать массив в структуре?
typedef struct {
int8_t duration[4];
bool alarm_enable;
uint8_t timer;
} set_t;
set_t set = {
// set.duration[] = {1,2,3,4}, //wtf?
set.duration[4] = 1,2,3,4,
set.alarm_enable = true,
set.timer = 25
};
void setup() {
Serial.begin(9600);
Serial.println("Struct test " __DATE__ " " __TIME__);
uint8_t* sp = (uint8_t*)&set;
for (uint8_t i = 0; i < sizeof(set); i++)
Serial.println(*sp++);
}
void loop() {
}
BABOS
27.Февраль.2026 06:59:37
2
typedef struct {
int8_t duration[4];
bool alarm_enable;
uint8_t timer;
} set_t;
// Правильная инициализация
set_t set = {
.duration = {1, 2, 3, 4}, // Вот так!
.alarm_enable = true,
.timer = 25
};
а [4] это обращение к 5тому начиная с 0!
Green1
27.Февраль.2026 08:31:20
4
Да, так всё класс. Плохо только что если в структуре много элементов, то можно ошибиться. Либо же нужно комментировать каждый элемент.
Green1
27.Февраль.2026 08:34:03
5
Это при присвоении, а здесь инициализация (если я не ошибаюсь?).
MMM
27.Февраль.2026 08:42:09
6
вариант от @BABOS с именованными полями тоже должен работать
Green1
27.Февраль.2026 08:49:18
7
С виду должен, но:
struct:15:3: error: expected primary-expression before '.' token
.duration[] = {1,2,3,4}, //wtf?
^
struct:15:13: error: expected primary-expression before ']' token
.duration[] = {1,2,3,4}, //wtf?
^
exit status 1
expected primary-expression before '.' token
BABOS
27.Февраль.2026 08:51:44
8
вы 5 элементу, под номером 4, присваиваете цифру 1… а далее перечисляете просто числа))) которые не понять компилятору… и лишняя запятая еще там… это так я вижу))) а как оно на самом деле не знаю, может кто то другой объяснит…
создайте массив, {} и в нем сделайте инициализацию
duration[] = {1,2,3,4}, вот тут лишнее []
в общем я просто помочь быстро, если надо))) а как там эта магия работает на самом деле… не знаю)))
Green1
27.Февраль.2026 08:57:14
9
BABOS:
duration = {1,2,3,4}, вот тут лишнее
Да, точно. Опечатался.( Совсем плохой.(
MMM
27.Февраль.2026 09:29:58
10
Green1:
С виду должен, но:
У меня компилируется без проблем
set_t set = {
.duration = {1,2,3,4},
.alarm_enable = true,
.timer = 25
};
Green1
27.Февраль.2026 09:35:31
11
Я уже исправился.)
Но у меня и в начальном сообщении результат нормальный, не нравится только форма инициализации массива. Через одно место как то.(
MMM
27.Февраль.2026 09:42:14
12
Да, он компилируется. Но запись выглядит криво и я не уверен, что оно инициализируется куда надо.
Green1
27.Февраль.2026 10:07:30
13
Ну так и на выходе было бы другое?
Struct test Feb 27 2026 13:05:40
1
2
3
4
1
25
Green1
27.Февраль.2026 14:35:20
15
)) Ну да, жаль только что компилятор ничего не пишет в этом случае.(
Бабосу нужно поставить 5. Он первый написал правильно.)