c版本的className

时间:2010-04-30 22:38:58

标签: c class types

如何在c中获取变量的类型? Objective c有className,php有get_class()等...

6 个答案:

答案 0 :(得分:5)

您查看源代码并找到类型;因为C中没有动态类型,所以存在静态类型。

答案 1 :(得分:3)

你不能这样做。 C绝对没有办法获得变量的类型。

答案 2 :(得分:1)

祝你好运。 C会将任何内存块转换为您喜欢的任何数据类型。它本身并不真正理解类型。

答案 3 :(得分:1)

你能做到的一种方法是使用sizeof运算符来获取变量的大小,然后在此基础上,你可以对变量的含义做出“假设”。
我不认为这会对指针有帮助,因为我的直觉是所有指针都有相同的大小,无论它们引用什么。

答案 4 :(得分:1)

正如其他答案所说,C不提供动态的运行时类型检查 - 所有类型都在编译时执行。如果您需要在C中进行运行时类型确定,那么您需要以某种方式自己构建它。

一些例子,

  • 将标记放在指示类型的结构中。
  • 使用printf()中的格式说明符字符串等其他数据来表示类型

例如,如果要将数据序列化到文件中或从文件中序列化数据,则可能需要执行这些操作。不幸的是,你几乎没有得到编译器或标准库的帮助。第三方序列化库可能有所帮助,但这实际上取决于您想要做什么。

答案 5 :(得分:0)

由于不可能*在C中有一个未知类型的变量,因此不需要这样做。对于C类型,没有等效的id。可能有一个void指针指向你不知道的目标类型的内存,但它必须被强制转换为指向特定类型的指针才能实际拥有任何特定类型 - 在此之前,它只是一个地址。 / p>

有些地方会有更多的多态性,但C只是没有它。

(*注意:我正在打折工会,因为他们都是自己的类型,而真正的问题是你想从中得到什么类型。)