Я хочу обеспечить тип элемента как параметр к инициализации массива указателей на элемент неизвестные типы
что-то как
void* init(type t)
void* array = malloc(sizeof_type(t)*10));
return array;
}
и более поздний вызов, например,
init(typeof(int))
Но я не смог изобразить то, что является типом возврата typeof.
Я предполагаю, что sizeof_type думают, может быть достигнут с помощью
malloc((type) 0);
Заранее спасибо
PS: это, если для вектора implementatin, если бы кто-то может указать на меня на некоторый flexiblecode, я был бы очень благодарен также
Обычно я не использую gnu (я думаю, что это только в gnu C), но я не думаю, что это выражение в обычном смысле, что вы можете присвоить его значение переменной а позже воспользуюсь им. Я думаю, что его можно использовать только в очень специфических контекстах как тип.
Синтаксис использования этого ключевого слова выглядит как sizeof, но конструкция семантически действует как имя типа определяется с помощью typedef.
Может использоваться конструкция typeof везде, где можно использовать имя typedef. Например, вы можете использовать его в объявление, в приведении или внутри sizeof или typeof.
Почему нельзя просто использовать sizeof? что-то вроде:
int c;
void *p = calloc( 10,sizeof(c) );
This:
#define INIT(t) (malloc(sizeof(t) * 10))
может использоваться как this:
int* a = INIT(int);
или, возможно, как this:
void* b = INIT(typeof(c));
или даже как this:
void* b = INIT(c);
поскольку sizeof(c) == sizeof(typeof(c))
Я знаю, что ваш вопрос не был помечен как таковой, но если у вас есть возможность использовать C ++, вы можете изучить использование классов шаблонов. Такие библиотеки, как STL, используют шаблоны для предоставления (типа) универсальных контейнеров и алгоритмов.
Вы можете использовать макрос для этой цели:
#define INIT(t) ((t*) init_1(sizeof(t)))
void *init_1(size_t sz) {
void *array = malloc(sz * 10);
return array;
}
Затем вы используете как:
int *array = INIT(int);