У меня есть массив структур, который содержит кучу информации, которая будет постоянной от времени компиляции. Я пытаюсь инициализировать массив, чтобы вся информация, относящаяся к конкретной переменной, находилась в одном месте. Проблема, с которой я сталкиваюсь, это тип данных, который может быть любым типом числа для var_ptr или var_max (другой член отслеживает тип обработки).Как инициализировать void * к известному типу данных
Я использую void * для указателя, но мне нужен способ выделения памяти и ее инициализации. См. Прокомментированный .var_max = & (23) ниже для примера того, что я пытаюсь выполнить.
typedef enum{
INT,
CHAR,
LONG,
LONGLONG,
FLOAT
} data_type_t;
typedef struct param_t param_t;
struct param_t{
const char* name; //Text name of variable
const void* var_ptr; //Pointer to variable
const void* var_max; //Pointer to max limit of var_ptr, same datatype
int (*p_func)(const param_t*, char *);//Function to process parameter variable
const data_type_t data_type; //Data type of
};
int MinMax_handler(const param_t *, char *);
extern int Hours, Minutes, Seconds;
/******************Variables go here******************/
const param_t param[] =
{
{.name = "DEV_RTC_HR", .var_ptr = &Hours, /*.var_max = &(23),*/ .p_func = &MinMax_handler, .data_type = INT},
{.name = "DEV_RTC_MIN", .var_ptr = &Minutes, .p_func = &MinMax_handler, .data_type = INT},
{.name = "DEV_RTC_SEC", .var_ptr = &Seconds, .p_func = &MinMax_handler, .data_type = INT}
};
/*****************************************************/
Комментирование .var_max = & (23) позволяет обобщить и, кажется, работает хорошо.
Похоже, что профсоюз может работать, но он будет занимать гораздо больше памяти, поскольку большинство типов данных будут int (16 бит), но мне нужно разместить длинные (64-битные).
Мне нужно, чтобы это ограничение было ограничено C. Окончательной версией этого элемента будет 50-150 элементов массива и автоматически создается извне.
«Нет» - это первое слово при просмотре названия. – herohuyongtao
Для члена var_max, есть ли что-нибудь, препятствующее вам использовать простой тип, такой как int или short? Затем вы можете просто установить значение в param_t param []. – ryyker
Одним из элементов массива struct может быть весь char, следующий может быть длинным. Нужно быть агностиком. И использование всего долгого времени съедало бы большую память на микроконтроллере. – user3219864