Как проверить тип переменной в C во время выполнения?

можно ли проверить, что тип переменной в любой заданной точке в коде?

например, скажем, я объявляю char y = 1; и функция int SomeFunction (int). Я тогда пройду y to someFunction, он будет преобразован в int и в конечном счете int будут возвращены.

Я знаю это из-за объявления функции. Я хотел бы, однако, подтвердить, что внутри someFunction, переменная фактически имеет тип int и переменная, возвращенная из someFunction is а также int.

можно ли это сделать в C, или вместо этого следует полагаться на объявление функции? предоставляет ли язык программирования C какой-либо механизм для проверки типа переменной во время выполнения?

2 ответов


в вашем коде вы можете положиться на то, что типы, которые вам передают, соответствуют тому, как они были объявлены. Вы не могли бы написать нетривиальную программу, если бы это было не так.

информация о типе в C доступна только во время компиляции. Во время выполнения ни одна из этих сведений не присутствует, поэтому нет стандартного встроенного способа, например, рассказать, какой тип объекта скрывается за случайным указателем.
Если вам нужна такая информация, посмотрите, компилятор имеет расширения для него (я не знаю, есть ли они) или использует фреймворки, которые предоставляют инфраструктуру для этого (glib есть такие вещи, я считаю).
Или свернуть свой собственный, если вы действительно это нужно.

или использовать C++ , который имеет некоторую информационную поддержку типа среды выполнения и, вообще говоря, более сложную систему типов, но это совершенно другой язык.


типы C в основном существуют во время компиляции.

вы можете поднять уровень предупреждения компиляторов, чтобы получить лучшую проверку (например, gcc-ansi-pedantic-Wall), но я считаю, что некоторые вещи все равно будут принуждаться по мере необходимости.

вы можете использовать объединение для ручного управления типами для некоторых задач, но в C обычно лучше просто полагаться на ваш компилятор для проверки типов.