Передача типа переменной в качестве параметра функции
Возможно ли передать тип переменной как часть параметра функции, например:
void foo(varType type)
{
// Cast to global static
unsigned char bar;
bar = ((type *)(&static_array))->member;
}
Я помню, что он имеет какое-то отношение к GCC typeof
и использует макросы?
Ответы
Ответ 1
Вы не можете сделать это для функции, потому что тогда ему нужно знать типы аргументов (и любые другие символы, используемые функцией) для генерации рабочего машинного кода. Вы можете попробовать макрос, например:
#define foo(type_t) ({ \
unsigned char bar; \
bar = ((type_t*)(&static_array))->member; \
... \
})
Ответ 2
Вы можете сделать перечисление для всех возможных типов и использовать переключатель для разыменования:
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;
...
}
}
Ответ 3
Не функция, но вы можете использовать такой макрос:
#include <stdio.h>
#define swap(type, foo, bar) ({type tmp; tmp=foo; foo=bar; bar=tmp;})
int main() {
int a=3, b=0;
printf("a=%d, b=%d \n", a, b); // a=3, b=0
swap(int, a, b); // <-- action happens here
printf("a=%d, b=%d \n", a, b); // a=0, b=3
return 0;
}
Ответ 4
Я не вижу, как вы могли бы сделать это в общем случае, учитывая, что C является статически типизированным языком.
Компилятор должен знать во время компиляции, что такое тип type *
, чтобы иметь возможность генерировать ссылку на ->member
.