我是C的新手,因为C有时会有一些变化,我常常感到困惑。我对操作(type
)返回的int,char
(如+,-
)感到困惑。所以在C中,我想知道变量在程序中的任何一点属于type
。这是在Java中我们将其称为Reflection,我们可以在运行时获取程序的所有信息。
现在在C中有任何lib在java中执行与Reflection API类似的工作。或者C中有任何技巧,可以用来查找特定变量属于哪种类型?
有什么想法吗?提前谢谢。
答案 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;
}
}
这些东西主要用于教育目的。除了观察和学习之外,你无法用它们做什么。