ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
23 июля
1204215 Топик полностью
Nikolay801_ (29.04.2022 16:08, просмотров: 238) ответил Moлoдoй кoллeгa на Односвязный список инициализируется в цикле и всё с этим хорошо. Решил положить этот список во флеш ибо ОЗУ всего 2K. 40 элементов списка я устану заполнять ручками. Есть варианты "автоматизации" инициализации массива структур при обьявлении? Можно препроцессор как-то использовать?
можно понадеяться что линкер положит подряд объявленные переменные подряд 
typedef struct NODE
{
  unsigned x;
  struct NODE *next;
} NODE;

#define CONCATENATE_DIRECT(s1, s2) s1##s2
#define CONCATENATE(s1, s2) CONCATENATE_DIRECT(s1, s2)

#define NODE_N(name, val) __root NODE CONCATENATE(name, __LINE__) = {.x=val, .next = &CONCATENATE(name, __LINE__)+1}
#define NODE_FRST(name, val) __root NODE name = {.x=val, .next = &name + 1}
#define NODE_END(name, val) __root NODE name##end = {.x=val, .next = &name}

NODE_FRST(linked_list, 9);
NODE_N(linked_list, 10);
NODE_N(linked_list, 11);
NODE_END(linked_list,55);
Будь ты проклят, Перри-Утконос!