有没有一种可移植的方法来查询 void* 指针的类型?
Is there a portable way to query the type of void* pointer?
基本问题:是否有可移植的(或者至少是大多数编译器中存在的库)方法来在运行时查询 void* 指针的类型?特别是,是否可以确定指针是 struct x 类型还是 struct y 类型(作为示例)。
其他信息:我知道 gcc 提供了 typeof 运算符,但我想要一种更便携、更少依赖编译器的方法来完成同样的事情。
要求:
不能完全依赖于编译器。这包括特定于编译器的宏和大多数编译器中不常实现的其他功能。
与任何可移植性较差的实现相比,我更喜欢适用于任何编译器的函数(尽管我会接受最适合我目标的答案)。
可以建议在库中使用不在 C11 函数中但在大多数编译器中常见的函数。请务必解释它的工作原理和参数。
你要求的是不可能的。 void *
指针根据定义 是通用指针。它可以转换为任何类型的指针或从任何类型的指针转换;无法确定它指向的数据类型(如果有的话!)。
基本问题:是否有可移植的(或者至少是大多数编译器中存在的库)方法来在运行时查询 void* 指针的类型?特别是,是否可以确定指针是 struct x 类型还是 struct y 类型(作为示例)。
其他信息:我知道 gcc 提供了 typeof 运算符,但我想要一种更便携、更少依赖编译器的方法来完成同样的事情。
要求:
不能完全依赖于编译器。这包括特定于编译器的宏和大多数编译器中不常实现的其他功能。
与任何可移植性较差的实现相比,我更喜欢适用于任何编译器的函数(尽管我会接受最适合我目标的答案)。
可以建议在库中使用不在 C11 函数中但在大多数编译器中常见的函数。请务必解释它的工作原理和参数。
你要求的是不可能的。 void *
指针根据定义 是通用指针。它可以转换为任何类型的指针或从任何类型的指针转换;无法确定它指向的数据类型(如果有的话!)。