Получить имя типа в виде строки в C, GCC - PullRequest
16 голосов
/ 24 мая 2011

Есть ли в GCC встроенное расширение для получения имени типа выражения в C? (В виде строки, то есть 'const char *').

Ответы [ 3 ]

3 голосов
/ 24 декабря 2012

Так как вы сказали, что хотите имя во время выполнения, это окончательное "нет".В C данные - это просто байты в памяти и вообще не имеют внутреннего типа.Только объявление типа сообщает компилятору, какой скомпилированный код должен ожидать тип.

Однако имеет смысл, чтобы компилятор C мог распознавать тип переменной при компиляциивремя, и это было бы здорово для реализации таких вещей, как утверждения равенства с дружественным выводом в рамках модульного тестирования.Хотя я не вижу, чтобы у C тоже было что-то подобное.

Кто-нибудь знает, все еще разрабатываются новые версии спецификации ANSI C?Идентификация типа во время компиляции была бы отличной вещью.Может быть, целочисленные константы для внутренних типов и тест на равенство типов для внутренних или определенных типов?

3 голосов
/ 24 мая 2011

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

2 голосов
/ 25 декабря 2012

Во-первых.Вы хотите получить тип выражения C во время выполнения.Проблема заключается в том, что типы стираются во время компиляции, а машинный код практически не содержит типов, он не содержит ничего, кроме 8/16/32/64-битных целых чисел и 32/64/80-битных чисел с плавающей запятой (в случае x86).Типы - это сущность времени компиляции для C (C ++ может сохранять некоторую информацию о типах во время выполнения, хотя из-за своей объектно-ориентированной природы он связывает типы с классами, но трудно отследить POD и примитивные типы).

Второй.Вы хотите тип выражения C .Иногда трудно сказать, каким будет данное C-выражение во время выполнения.

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

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