c версия className - PullRequest
       35

c версия className

3 голосов
/ 01 мая 2010

Как мне получить тип переменной в c?Цель c имеет className, php имеет get_class () и т. Д ...

Ответы [ 6 ]

5 голосов
/ 01 мая 2010

Вы смотрите в исходном коде и находите тип; поскольку в C нет динамических типов, статический тип - это все, что есть.

3 голосов
/ 01 мая 2010

Вы не можете сделать это. C не предоставляет абсолютно никакого способа добраться до типа переменной.

1 голос
/ 01 мая 2010

Как уже говорилось в других ответах, C не обеспечивает динамическую проверку типов во время выполнения - вся типизация выполняется во время компиляции. Если вам нужно определить тип среды выполнения в C, то вам нужно как-то его собрать.

Некоторые примеры,

  • размещение тега в структуре, которая указывает тип.
  • с использованием других данных, таких как строка спецификатора формата в printf(), для указания типа

Это те вещи, которые вам могут понадобиться, например, если вы сериализуете данные в / из файла. К сожалению, вы не получите никакой помощи от компилятора или стандартной библиотеки. Сторонняя библиотека сериализации может помочь, но это будет зависеть от того, что именно вы хотите делать.

1 голос
/ 01 мая 2010

Один из способов сделать это - использовать оператор sizeof для получения размера переменной, а затем, основываясь на этом, вы можете сделать «предположения» о том, что это за переменная. Я не думаю, что это поможет вам с указателями, так как моя интуиция заключается в том, что все указатели имеют одинаковый размер, независимо от того, на что они ссылаются.

1 голос
/ 01 мая 2010

Удачи с этим. C преобразует любой блок памяти в любой тип данных, который вам нравится. Он не понимает типы как таковые.

0 голосов
/ 01 мая 2010

Поскольку невозможно иметь переменную неизвестного типа в C, в этом нет необходимости. Не существует эквивалента id для типов C. Можно иметь void-указатель на память, чей предполагаемый тип вы не знаете, но он должен быть приведен к указателю на определенный тип, чтобы на самом деле иметь какой-либо конкретный тип - до тех пор это просто адрес. 1002 *

Есть места, где полезнее было бы больше полиморфизма, но у C его просто нет.

(* Примечание: я не принимаю во внимание союзы, поскольку они принадлежат к одному типу, и реальный вопрос в том, какой тип вы хотите выбрать из него.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...