我是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;
}
}
这些东西主要用于教育目的。除了观察和学习,你没有什么可以用它们做的。