Не могу понять данную структуру
- Войдите на сайт для отправки комментариев
Сб, 07/03/2020 - 19:36
Здравствуйте, уважаемые форумчане. Нашел интересный код, но не могу понять одну конструкцию.
#define SIZE_TX_BUFFER 64 #define SIZE_RX_BUFFER 128 struct txBuffer_s { uint8_t buffer[SIZE_TX_BUFFER]; uint8_t tail; uint8_t head; }; struct rxBuffer_s { char buffer[SIZE_RX_BUFFER]; uint8_t count; }; struct rxBuffer_s rxBuffer = {{0},0}; // Выходной буфер USARTа. struct txBuffer_s txBuffer = {{0},0,0}; // Входной буфер USARTа.
Мне не понятна эта часть:
struct rxBuffer_s rxBuffer = {{0},0}; // Выходной буфер USARTа. struct txBuffer_s txBuffer = {{0},0,0}; // Входной буфер USARTа.
Что означает данная конструкция? Можно ли так объявлять структуру?
Разве не должна быть объявлена переменная таким образом:
rxBuffer_s rxBuffer; txBuffer_s txBuffer;
Она не должна, но может быть так объявлена, если выше по тексту будет использован typedef.
Что означает данная конструкция?
Что в переменных rxBuffer и txBuffer изначально будут записаны нули во всех полях. Они и так бы там были, но явно это указать - более правильно.
Нет, конечно, но здесь её никто и не обновляет.
Разве не должна быть объявлена переменная таким образом:
Переменная никому ничего не должна. У Вас есть кредитный договор с нею? Нет? Ну, а чего она Вам должна тогда?
typedef не была объявлена.
Загрузил этот код. Странно но компилятор не ругается, принимает.
А можно по-подробнее объяснить про это (или ссылку на какой-нибудь источник):
{{0},0};
{{0},0,0};
"Нет, конечно, но здесь её никто и не обновляет." - тогда почему два раза пишется struct?
Это инициализация членов структуры: массива и переменных.
А можно по-подробнее объяснить про это (или ссылку на какой-нибудь источник):
{{0},0};
{{0},0,0};
Да, конечно, в самой первой теме раздела "песочница", первая ссылка вот в этом посте. Про эти вещи написано в § 11.6.1.
"Нет, конечно, но здесь её никто и не обновляет." - тогда почему два раза пишется struct?
Не понял каким боком связано "никто не обновляет" и "два раза struct".
Не обновляет потому. что здесь задаются начальные значения, а не обновляются текущие.
А что касается struct, поясните что Вас смущает и где два раза - то? Вроде
struct
rxBuffer_s rxBuffer = {{0},0};
// Выходной буфер USARTа.
один раз struct написано.
ЕвгенийП, вас в посте 2, полагаю, автозамена подвела и получилось "обновляет" вместо "объявляет".
Нет, это меня кривые глаза подвели - я прочитал у ТС это слово как "обновлять".
ТС, забудьте про "обновление", это я ошибся, сорри.
Огромное Вам спасибо за ссылку. То что я и искал. Тема инициализаторы (а то я даже названия незнал и соответственно в поисковике вбить не мог).
Насчет того что написано два раза struct, это я имел ввиду вот, например:
struct rxBuffer_s