Могу ли я найти, к какому типу относится переменная, в C? - PullRequest
2 голосов
/ 13 сентября 2011

Я новичок в C, и, поскольку C иногда вносит некоторые изменения, я часто путаюсь. Я запутался в том, что type (например, int,char) возвращает операция (+,-). Поэтому в C я хочу знать, к какой type переменной относится в любой точке программы. То есть в Java мы называем это Reflection и можем получить всю информацию о наших программах во время выполнения.

Теперь в C есть какая-нибудь библиотека, которая выполняет аналогичную работу Reflection API в Java. Или есть какой-то трюк в C, который можно использовать для определения того, к какому типу относится конкретная переменная?

Есть идеи? Заранее спасибо.

Ответы [ 3 ]

3 голосов
/ 13 сентября 2011

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

В новом C ++ 11 есть ключевое слово decltype, которое возвращает тип выражения, поэтому вы можете сказать decltype(x + y) z = x + y; для объявления z типа выражения x + y.Однако это конструкция времени компиляции, так что это всего лишь ярлык к тому, что вы могли бы сделать другими способами.

0 голосов
/ 13 сентября 2011

Если ваша реализация поддерживает C ++ ABI, вы можете использовать его для распечатки типов выражений.

#include <iostream>
#include <typeinfo>
#include <cstdlib>
#include <cxxabi.h>

int main ()
{
    int status;
    char* mytypename = abi::__cxa_demangle(typeid((2+'x')*0.9f).name(), 0, 0, 
                                             &status);
    if (mytypename && status == 0)
    {
        std::cout << mytypename << std::endl;
        std::free (mytypename);
    }
    else
    {
        std::cerr << "Error determining type name, status is " 
                   << status << std::endl;
    }
}

Такие вещи полезны в основном для образовательных целей. С ними мало что можно сделать, кроме как смотреть и учиться.

0 голосов
/ 13 сентября 2011

Если вы используете #include <typeinfo>, вы можете использовать typeid для получения типа переменной.

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