ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
26 апреля
731551 Топик полностью
Nikolay801_ (27.01.2017 08:46 - 30.01.2017 11:57, просмотров: 158) ответил бомж на А если передавать 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 и С, в С++ этот код превращается в тыкву.
Будь ты проклят, Перри-Утконос!