我见过一个函数,其原型是:
int myfunc(void** ppt)
该函数在 C 文件中调用为
a = myfunc(mystruct **var1);
其中 mystruct 是我们拥有的结构之一的 typedef。
这在MSVC6.0中没有任何编译错误,但是当我用其他一些C编译器编译它时,它在调用该函数的地方给出错误并显示错误消息:
mystruct ** 类型的参数与 void ** 类型的参数不兼容
myfunc() 的参数保留为 void**,因为它似乎是一种通用的 malloc 类型的函数,可以使用各种结构变量类型来调用以进行内存分配
- C 标准/任何 C 编译器是否允许任何类型,例如 void **?
- 我该如何解决? [我尝试将函数调用参数转换为
mystruct**
,但没有成功]
-AD
The comp.lang.c 常见问题解答详细解决了这个问题问题 4.9。简而言之,他们说它不是严格意义上的便携式将任意指针到指针转换为void **
;他们继续解释说“这样的代码可能有效并且有时被推荐,但它依赖于具有相同内部表示的所有指针类型(这是常见的,但不是通用的)。”他们接着解释说“任何void **
您使用的值必须是实际的地址void *
某处有价值;像(void **)&dp
,尽管它们可能会关闭编译器,但它们是不可移植的(甚至可能无法执行您想要的操作)。”
因此,您可以使用以下代码安全/可移植地实现所需的行为:
some_type *var1 = foo();
void *tmp_void_ptr = (void *)var1;
myfunc(&tmp_void_ptr);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)