Можно ли передать тип переменной как часть параметра функции, например:
void foo(varType type)
{
// Cast to global static
unsigned char bar;
bar = ((type *)(&static_array))->member;
}
Я помню, что это как-то связано с GCC typeof
и использованием макросов?
Я не понимаю, как вы могли бы сделать это в общем случае, учитывая, что C является статически типизированным языком .
Компилятор должен знать во время компиляции, что тип type *
, чтобы иметь возможность генерировать ссылку на ->member
.
Вы можете сделать перечисление для всех возможных типов и использовать переключатель для разыменования:
typedef enum {
CHAR,
INT,
FLOAT,
DOUBLE
} TYPE;
void foo(TYPE t, void* x){
switch(t){
case CHAR:
(char*)x;
break;
case INT:
(int*)x;
break;
...
}
}