с, структура/данные/наполнение, как оптимизировать?!
день добрый, товарищи колдуны! :о)
краткое строение проекта:
- struct.x - описание структуры, массив/список данных/структур, функции работы со структурой/списком.
- struct_cust.x - кастомные данные, создание экземпляров структуры, добавление в "список"
некоторые неудобства:
- наполнение данных/добавление в "список" происходит в реализации/struct_cust.с
- установка счетчика списка в хедере/struct_cust.h
по другому не получилось «реализовать»,хотелось бы все логично/в одном месте:
- создание данных/добавление в список
- определение/установка счетчика
какие есть мнение/идеи/хаки-каки итд?!
- linux, gcc, c-pure
спасиб
...
main.c
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include "main.h"
#include "struct.h"
int main (void)
{
printf("### struct ###\n");
struct_list();
return 0;
}
struct.h
struct data_struct
{
uint8_t num;
void (*func)(uint8_t id);
};
void struct_list(void);
struct.c
#include "struct.h"
#include "struct_cust.h"
struct data_struct * lst[NUM];
void struct_list()
{
printf("struct_list()\n");
for(uint8_t i=0; i<NUM; i++)
{
printf("lst[%u].num = %u; ",i, lst[i]->num);
if(lst[i]->func != NULL) { lst[i]->func(i); }
printf("\n");
}
}
struct_cust.h
#define NUM 3
void struct_cust_func(uint8_t id);
struct_cust.c
#include "struct.h"
#include "struct_cust.h"
struct data_struct data1 = { .num = 1, .func = struct_cust_func };
struct data_struct data2 = { .num = 2, };// .func = struct_cust_func };
struct data_struct data3 = { .num = 3, .func = struct_cust_func };
extern struct data_struct * lst[NUM];
struct data_struct * lst[NUM] = { &data1, &data2, &data3 };
void struct_cust_func(uint8_t id)
{
printf("struct_cust_func(%u)", id);
}
makefile
all: main.o struct.o struct_cust.o
gcc -o main main.o struct.o struct_cust.o
main.o: main.c
gcc -c main.c
struct.o: struct.c
gcc -c struct.c
struct_cust.o: struct_cust.c
gcc -c struct_cust.c
clean:
rm -f *.o main
main out
### struct ###
struct_list()
lst[0].num = 1; struct_cust_func(0)
lst[1].num = 2;
lst[2].num = 3; struct_cust_func(2)
### UPDATE ###
торопился, думал опишу коротко и понятно, видимо, не получилось.
по сути - это не программа а кастрированный проект, оставлено только то, что нужно для понимания сути. точнее, даже, это не проект, а набросок, потому, что «это» я набивал в ручную, так сказать, делал минимальный рабочий минимум... как-то так.
общее описание (плюс минус, для понимания)
есть главный модуль (main.c) - он ... он просто главный, использует «данные» и «функции», оперирующие с этими данными.
struct.x - модуль/бибилотека, описывает структуру и содержит в реализации функции, работающие с «данными» структурами.
strucr_cust.x - модуль с пользовательскими данными, созданными на базе «структур», описанных в struct.h
в этом модуле мы создаем данные (3 штуки структуры, добавляем их в список структур lst[NUM], с которым работает библиотка struct.c)
так-же тут мы определяем пользовательские функции, но это уже другой уровень, не важно... главное то, что модуль stuct_cust.x - содержит наши данные и будет в будущем модернизироваться (создаваться новые еденицы структур, тут-же добавляться в массив/список lst[NUM])
так вот, при создании/добавлении структур - есть некоторое разделение
- strucr_cust.c создание экземпляров структур
- strucr_cust.h - определение глобальной константы NUM - число структур в списке
хотелось-бы все делать в одном месте (создавать экземпляры структуры, изменять/настраивать счетчик NUM, добавлять структуры в список lst[NUM])
собственно, не очень и сложно : добавил структуры, зашел в хедер, изменил макрос NUM - и ву-а-ля, можно далее в ус не дуть! :о)
в 2х словах это как-то так. если что - спрашивайте. :о) спасибо