【发布时间】:2011-09-10 22:11:28
【问题描述】:
在 C(不是 C++/C#)中,我如何检查变量是否属于某种类型?
例如,像这样的:
double doubleVar;
if( typeof(doubleVar) == double ) {
printf("doubleVar is of type double!");
}
或更笼统地说:我如何比较两种类型,以便compare(double1,double2) 评估为真,compare(int,double) 评估为假。我也想比较不同组成的结构。
基本上,我有一个对“struct a”和“struct b”类型的变量进行操作的函数。我想用“struct a”变量做一件事,用“struct b”变量做另一件事。由于 C 不支持重载并且 void 指针丢失了它的类型信息,我需要检查类型。顺便说一句,如果您不能比较类型,那么拥有 typeof 运算符有什么意义?
sizeof 方法对我来说似乎是一个实用的解决方法。谢谢你的帮助。我仍然觉得有点奇怪,因为类型在编译时是已知的,但是如果我想象机器中的进程我可以看到,为什么信息不是按照类型存储的,而是按照字节大小存储的。除了地址,大小是唯一真正相关的东西。
【问题讨论】:
-
你不能将它们都转换为双精度(并添加
0.00)吗?不确定这在 C 中是否可行,只是一个建议。 -
查看源代码,它在那里声明 doubleVar 是双精度数。不需要(也不可能)在运行时检查它。
-
回应编辑#1:您是否考虑过使用函数指针(如 vtable)来解决您的问题?
-
如果你喜欢 sizeof 方法,请阅读that article 了解 gcc 的 tgmath 实现。
-
@Michael Foukarakis 你能举个例子吗?