我可以在C中找到变量所属的类型吗?

时间:2011-09-13 16:01:14

标签: c reflection

我是C的新手,因为C有时会有一些变化,我常常感到困惑。我对操作(type)返回的int,char(如+,-)感到困惑。所以在C中,我想知道变量在程序中的任何一点属于type。这是在Java中我们将其称为Reflection,我们可以在运行时获取程序的所有信息。

现在在C中有任何lib在java中执行与Reflection API类似的工作。或者C中有任何技巧,可以用来查找特定变量属于哪种类型?

有什么想法吗?提前谢谢。

3 个答案:

答案 0 :(得分:3)

C和C ++是静态类型语言,因此没有反射,也没有用于类型发现的库。在C中,您只需阅读标准并了解类型提升规则。幸运的是,这是你应该能够迅速掌握的有限数量的信息。

在新的C ++ 11中,decltype关键字返回表达式的类型,因此您可以说decltype(x + y) z = x + y;z声明为类型表达x + y。这是一个编译时构造,所以这只是你可以用其他方法推断的东西的捷径。

答案 1 :(得分:0)

如果您使用#include <typeinfo>,则可以使用typeid获取变量类型。

答案 2 :(得分:0)

如果您的实现支持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;
    }
}

这些东西主要用于教育目的。除了观察和学习之外,你无法用它们做什么。