在C语言中,我能找到变量属于什么类型吗?



我是C的新手,由于C有时会进行一些隐式更改,所以我经常感到困惑。我对type(像int,char)的操作(+,-)返回的内容感到困惑。在C语言中,我想知道type变量在程序中任意点的归属。在Java中,我们称之为反射,我们可以在运行时获得程序的所有信息。

现在在C中有任何库做类似的工作的反射API在java中。或者在C语言中有什么技巧,可以用来找出一个特定的变量属于什么类型?

任何想法?

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

在新的c++ 11中,有decltype关键字返回表达式的类型,所以你可以说decltype(x + y) z = x + y;来声明z是表达式x + y的类型。但是,这是一个编译时结构,因此这只是一个可以通过其他方式推断的快捷方式。

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

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

这些东西主要用于教育目的。除了观察和学习,你没有什么可以用它们做的。

相关内容

  • 没有找到相关文章

最新更新