- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
static struct frame rx_frame = {
.data = rx_buffer,
.sz = sizeof(rx_buffer)
};
...
где-то в том же модуле:
struct frame *task_communication_receive_frame(void)
{
memset(rx_frame, 0, sizeof(rx_frame));
...
}
Поясните плз за синтаксис - что это такое?
To initialize a range of elements to the same value, write ‘[first ... last] = value’. This is a GNU extension. For example, Круто! Диапазоны почти паскалевского синтаксиса. Ещё бы в свитч-кейс их завезли...
А вот это выглядит ужасно:
А ведь устаревший синтаксис похож на JSON.
мне он больше нравился. где-то плавало весьма расплывчатое объяснение почему ISO решил в конце синтакс с точкой стандартизировать.
В GCC завезли: http://ideone.com/oql1jt
а как же ANSI C?
давно уже можно делать VLA, декларить переменные не сверху блока, давно уже есть wchar итд
имхо, если можно обойтись без динамической кучи, то лучше без нее обойтись
другой вопрос что в стек можно случайно захуячить 20 гигабайт и сделать плохо
Никогда стек не рвался от аллоки, вла или просто большого массива?
потому и было сказано: "захуячить 20 гигабайт"
Но если я _точно_ знаю что там лежит массив из десяти интов, то нафиг мне беспокоить менеджера куч?
С другой стороны я могу и статически определить массив на 10 интов без VLA
выходит, динамическое управление стеком вообще не нужно?
В этом случае, я так понимаю, остаётся на совести программиста, сколько будет сожрано памяти на стеке, т.е. тоже говно и так делать нельзя?
Хуже можно было сделать, только используя int вместо size_t. VLA отрицательного размера тоже можно сделать.
***! *****!
А что в этом случае будет? Конец стека подвинется обратно и вызов вложенных функций затрёт локальные переменные? Размер кастанётся к беззнаковому числу?
Справедливости ради замечу, что если компилятор может доказать, что размер отрицательный, он выдаёт ошибку.