函数在公共API中采用void *并在后台输入*的类型冲突

lea*_*vst 1 c types function

我正在尝试建立一个第三方库,该库具有在公共标头中定义的功能,例如

void reset(void* instance);
Run Code Online (Sandbox Code Playgroud)

并在执行中

void reset(instance_type* instance) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

而且我遇到了一个冲突的类型编译器错误。现在,这对我来说似乎很明显。作者使用的是MSVC,而我使用的是设置为C99标准的gcc,也许这就是为什么它可以在作者的计算机上使用的原因?在不希望instance_type通过公共接口公开的约束下,我可以做些什么最小的修改?

Joh*_*ger 5

在不希望instance_type通过公共接口公开的约束下,我可以做些什么最小的修改?

该定义必须与标题中的声明一致。如果您不想instance_type在公共API中公开,则意味着修改定义以匹配标头:

void reset(void* _instance) {
   instance_type* instance = _instance;
   ...
}
Run Code Online (Sandbox Code Playgroud)