Инициализация массива структур в C

отвечал на это:

Возможно есть какие-то хитрые способы, но я сейчас сразу не придумаю.
На это Вам @ЕвгенийП может ответить, если Вы перестанете его игнорировать.

в общем суть чуть выше, надо запись типа :

spisok_frame sf[0x800] = {
 { 0, 0 },
 { 0, 0},
 { 0, 0 },
 { 0, "text1" },
 { 0, 0 },
...

сократить до вменяемого размера. Есть какие способы?

Можно, почему нельзя. Я бы это уже пару часов назад показал, если бы дождался ответов на свои вопросы. Там много зависит от ответов, потому, не получив их, не хочу без толку пальцы об клавиши бить.

МЛЯ!!!

Ответить на заданные Вам вопросы. Есть какие способы?

С пропусками? - с интересом почитаю
А то что можно инициировать не до конца, это понятно :slight_smile: - судя по Вашим вопросам, вы про это :slight_smile:

оставить только в коде { 0, “text1” }, и не писать все { 0, 0 },

@pepelxl
вы нарываетесь :slight_smile:
Внимательно прочитать вопросы не судьба?

Уже нарвался, у меня пропало желание как-то ради него напрягаться и писать для него примеры.

С пропусками, конечно, нельзя, но если инициализируется константами, то можно выполнить инициализацию на этапе компиляции при помощи constexpr кода. Я бы показал ТС, но, видать, не судьба.

если я вас чем -то обидел, то извиняюсь. Иногда сильно туплю.

вы проигнорировали уточняющик вопрос

я просто думал, что несколько раз об этом сказал - будут разбросаны как попало.
По учебнику - инициализация массивов допускается только последовательно. Суть массива - выводить на печать текст если в структуре id !=0 && name !=0.
constexpr мне интересен, но я не изучал его принципы относительно C (не С++). И возможности компиляции по дефолту в CUBE-IDE

Почему именно С?
CUBE-IDE для стм32, насколько мне известно, использует С++

1 лайк

по умолчанию CUBE MX собирает в Си. Переключить можно, но в данный момент уже большая часть написана так, а отлавливать блохи желания не много. И я сильно жалею, что не переключил сразу.

Есть что-то, что заставляет Вас делать именно так? Нельзя положить все строчки в начале массива?
Есть какой-то смысл, почему строчка ххххх должна лежать именно в ячейке 1234, а не в 2, например?

скорость. Обращение к ячейкам ID будет в прерывании, и перебирать каждый раз массив в поиске своего места не вариант.

Это не ответ.
Почему нельзя назначить строчкам, инициируемым при старте программы, номера в начале массива - а все остальное уже добавлять потом?
По-моему избавления от инициализации массива почти вручную весомый аргумент, чтобы пересмотреть порядок индексов.

Два массива, например: data и idx. В дату последовательно сложить, в idx как надо и указатели на элементы data нацелить.

1 лайк
  1. в чистом Си, не ++, нет возможности раскидать значения по массиву на этапе компиляции.
  2. в С++ есть такой способ.
  3. В .h файле, если его создать автоматически, никаких проблем написать и пустые строчки тоже. Тогда будет работать в Си. Чем не решение?
  4. можно построить массив со строками на нужных тебе местах ПЕРЕД запуском основного цикла. На этапе исполнения, но ДО начала работы. Это, в случае Си, самое простое решение.
1 лайк

хорошая идея, только с моими текущими знаниями, это взрыв мозга. ни когда не соединял два кода и не знаю как это сделать.

вот этого хотелось избежать, скорость запуска stm мне надо минимизировать.