有没有一种可移植的方法来查询 void* 指针的类型?

Is there a portable way to query the type of void* pointer?

基本问题:是否有可移植的(或者至少是大多数编译器中存在的库)方法来在运行时查询 void* 指针的类型?特别是,是否可以确定指针是 struct x 类型还是 struct y 类型(作为示例)。

其他信息:我知道 gcc 提供了 typeof 运算符,但我想要一种更便携、更少依赖编译器的方法来完成同样的事情。

要求:

  1. 不能完全依赖于编译器。这包括特定于编译器的宏和大多数编译器中不常实现的其他功能。

  2. 与任何可移植性较差的实现相比,我更喜欢适用于任何编译器的函数(尽管我会接受最适合我目标的答案)。

  3. 可以建议在库中使用不在 C11 函数中但在大多数编译器中常见的函数。请务必解释它的工作原理和参数。

你要求的是不可能的。 void * 指针根据定义 是通用指针。它可以转换为任何类型的指针或从任何类型的指针转​​换;无法确定它指向的数据类型(如果有的话!)。