基本问题:在运行时是否有可移植的(或至少是大多数编译器中的库)方式来查询void *指针的类型?特别是,是否可以确定指针是struct x类型还是struct y类型(作为示例)。
其他信息:我知道gcc提供了typeof运算符,但我想要一种更便携,更少编译器依赖的方法来完成同样的事情。
要求:
不能完全依赖编译器。这包括特定于编译器的宏以及大多数编译器中通常不实现的其他功能。
我更喜欢一个适用于任何编译器的函数,而不是任何可移植的实现(尽管我会接受最适合我目标的答案)。
建议在库中使用不在C11函数中的函数,但在大多数编译器中都常见。确保你解释它是如何工作的和参数。
答案 0 :(得分:6)
你所要求的是不可能的。根据定义,void *
指针是通用指针。它可以转换为任何类型的指针;没有办法确定它指向的数据类型(如果有的话)。