Ответ 1
Возможно, вы могли бы взглянуть на макрос TYPE_NAME, который, кажется, является хорошей отправной точкой.
Есть ли встроенное расширение GCC для получения имени типа выражения в C? (В качестве строки, т.е. 'Const char *').
Возможно, вы могли бы взглянуть на макрос TYPE_NAME, который, кажется, является хорошей отправной точкой.
Поскольку вы сказали, что хотите имя во время выполнения, это окончательное "нет". В C данные являются просто байтами в памяти и вообще не имеют встроенного типа. Только объявление типа сообщает компилятору, что компилируемый код должен ожидать, что этот тип будет.
Было бы разумно, однако, чтобы компилятор C мог распознавать тип переменной во время компиляции, и это было бы прекрасно для реализации таких вещей, как утверждения равенства с дружественным выходом в рамках модульной проверки. Я не вижу, что C имеет что-то подобное, хотя.
Кто-нибудь знает, все еще разрабатываются новые версии спецификации ANSI C? Идентификация типа времени компиляции будет отличным дополнением. Может быть, целые константы для внутренних типов и тест равенства типа для внутренних или определенных типов?
Во-первых. Вы хотите получить тип выражения C во время выполнения. Проблема заключается в том, что типы стираются во время компиляции, а машинный код почти не нужен, он не содержит ничего, кроме 8/16/32/64 битных целых чисел и 32/64/80 бит чисел с плавающей запятой (в случае x86). Типы - это объект времени компиляции для C (С++ может сохранять некоторую информацию о типах во время выполнения, хотя из-за своей объектно-ориентированной природы он ассоциирует типы с классами, но трудно отслеживать POD и примитивные типы).
Во-вторых. Вы хотите тип выражения C. Иногда трудно сказать, что такое C-выражение во время выполнения.
Таким образом, нет способа получить тип выражения типа C во время выполнения.