Nikolay801_ (27.01.2017 08:46 - 30.01.2017 11:57, просмотров: 204) ответил бомж на А если передавать void* на структуру, первым членом которой будет длина этой структуры, вторым - перечисляемый тип следующего члена и т.д. Ну и считывать её в цикле, при этом расшифровывая.
хорошая идея! попозжее нарисую. спасибо! #include <stdbool.h>
#include <stdarg.h>
typedef enum
{
ST_STOP = 0,
ST_POINT = 1,
ST_POWER = 2,
ST_COUNT,
}STRUCT_TYPE;
typedef struct Point_def{
int x;
int y;
}Point;
typedef struct Power_def{
int U;
int I;
}Power;
void mPar(int first, ...){
va_list argptr;
bool isNext = true;
/* Инициализация argptr */
va_start(argptr, first);
while(isNext){
switch((STRUCT_TYPE) va_arg(argptr, int)){
case ST_POINT:{
Point pt = va_arg(argptr, Point);
}break;
case ST_POWER:{
Power power = va_arg(argptr, Power);
}break;
default:
isNext = false;
break;
}
}
/* выполнение корректного выхода */
va_end(argptr);
}
void foo(void){
mPar((int)ST_STOP);
mPar((int)ST_POINT, (Point){1, 2}, (int)ST_STOP);
mPar((int)ST_POINT, (Point){1, 2}, (int)ST_POWER, (Power){3, 4}, (int)ST_STOP);
}
можно вот так.
но с99 и С, в С++ этот код превращается в тыкву.
Будь ты проклят, Перри-Утконос!