我知道答案不应该很复杂,但我对错误消息感到困惑。我不知道
floating-point
从何而来。
error: pointer value used where a floating-point was expected
279 | ret_value = (void *)((IntFuncWithThreeArg)closure->bound_func)((int)args_values[0], (double)args_values[1], (int)args_values[2]);
上面的表达式是对 ffi 闭包的调用,它返回具有以下类型的
int
:
typedef int (*IntFuncWithThreeArg)(int, double, int);
ret_value
变量定义为void *
。并且 args_values
显然是一个 void *
的数组,其中包含不同的类型。
我错过了什么吗?或者问题大部分出在代码中的某个地方?
args_values 显然是一个包含不同类型的 void * 数组。
您正在将
void *
转换为 double
,如下所示:
int main( void ) {
void *vp;
double d = (double)vp;
}
<source>:3:3: error: pointer value used where a floating-point was expected
3 | double d = (double)vp;
| ^~~~~~
这是未定义的行为,因此发出警告。
args_values[1]
实际上是一个指向double的指针吗?如果是这样,您应该使用
*(double *)args_values[1]