“在需要浮点的地方使用指针值”,但变量的类型为 void *

问题描述 投票:0回答:1

我知道答案不应该很复杂,但我对错误消息感到困惑。我不知道

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 *
的数组,其中包含不同的类型。

我错过了什么吗?或者问题大部分出在代码中的某个地方?

c casting ffi
1个回答
0
投票

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]
© www.soinside.com 2019 - 2024. All rights reserved.