Bla*_*Guy 1 c callback return-type
我正在检查代码库的遗留代码,并遇到了以下代码:
void *sampleFunction(tUint8 **inParam1, tUint32 inParam2, char *inParam3, tUint32 inParam4, void* inArg1, void* inArg2)
{
X100 *foo = getFooValue(...);
return foo;
}
Run Code Online (Sandbox Code Playgroud)
由于我无法发布确切的代码(因为它与工作相关),因此我发布了上面的示例(这正是它的样子)。
X100这里显示的是一个保存一些数据的结构,并且有一个如下所示的回调函数,上面的函数被分配给它(或者这就是我看起来的样子)
typedef void* (*tFileReadVerifyCallback)((tUint8 **inParam1, tUint32 inParam2, char *inParam3, tUint32 inParam4, void* inArg1, void* inArg2);
tFileReadVerifyCallback callBack;
//for a certain case :
callBack = sampleFunction;
Run Code Online (Sandbox Code Playgroud)
现在,我有以下问题:
sampleFunction返回foo的是类型X100?是因为回调的行为不同吗?注意:我试图提供足够的信息,同时尽量保持最少。如果需要更多输入,请告诉我,我会尝试编辑它并添加更多信息。
为什么
sampleFunction返回foo的是类型X100?
不,它返回foo的是 a X100 *,一个对象指针。回调被指定为 return void *,并且所有对象指针都可以转换为void *. 回调没有什么特别的。
void *通常用于这种类型擦除,以允许函数返回“任何内容”。您会看到它在回调中使用,因为目的是让客户端代码返回它们可能喜欢的任何对象指针。
当然,当返回指向任意对象的指针时,出现的一个重要问题是“如果有的话,应该何时释放该对象?” 答案取决于接受回调的库,以及它如何记录与回调的交互。