каков тип возврата typeof?

Я хочу обеспечить тип элемента как параметр к инициализации массива указателей на элемент неизвестные типы

что-то как

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, я был бы очень благодарен также

5
задан Alexandre C. 16 July 2010 в 14:15
поделиться

5 ответов

Обычно я не использую gnu (я думаю, что это только в gnu C), но я не думаю, что это выражение в обычном смысле, что вы можете присвоить его значение переменной а позже воспользуюсь им. Я думаю, что его можно использовать только в очень специфических контекстах как тип.

Из документации:

Синтаксис использования этого ключевого слова выглядит как sizeof, но конструкция семантически действует как имя типа определяется с помощью typedef.

Может использоваться конструкция typeof везде, где можно использовать имя typedef. Например, вы можете использовать его в объявление, в приведении или внутри sizeof или typeof.

3
ответ дан 13 December 2019 в 22:00
поделиться

Почему нельзя просто использовать sizeof? что-то вроде:

int c;
void *p = calloc( 10,sizeof(c) );
3
ответ дан 13 December 2019 в 22:00
поделиться

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))

1
ответ дан 13 December 2019 в 22:00
поделиться

Я знаю, что ваш вопрос не был помечен как таковой, но если у вас есть возможность использовать C ++, вы можете изучить использование классов шаблонов. Такие библиотеки, как STL, используют шаблоны для предоставления (типа) универсальных контейнеров и алгоритмов.

http://www.cplusplus.com/doc/tutorial/templates/

http://en.wikipedia.org/wiki/Template_%28programming%29

0
ответ дан 13 December 2019 в 22:00
поделиться

Вы можете использовать макрос для этой цели:

#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);
0
ответ дан 13 December 2019 в 22:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: