我正在使用PyArray_SimpleNew()将计算C程序转换为Python,以在C中创建一个numpy数组。但是,我收到警告
C4055:: from data pointer 'void *' to function pointer 'PyObject *(__cdecl *)
以下是相关代码的摘录:
PyObject* myArray=NULL;
npy_int nd=1;
npy_int dims[1]={10};
myArray=PyArray_SimpleNew(nd,dims,NPY_UINT64)
警告发生在最后一行。经过一些谷歌搜索,它表明它是由于Numpy库中的不正确实施违反了C标准。
所以我的问题是,
1.有谁可以解释这里发生了什么?特别是在那里" void *"来自? 2.这个警告在这个用例中真的很重要吗?压制它会安全吗?
一些参考:
http://docs.scipy.org/doc/numpy/reference/c-api.array.html Pointer-type mismatch with PyArray_SimpleNew
答案 0 :(得分:1)
好的,所以在深入研究PyArray_SimpleNew()的Python源代码后,似乎python正在使用嵌套的Macro,并在场景后面进行一些函数回调。因此,编译器看到的是指向函数的指针而不是PyObject *类型的正确返回值。这是非标准用法,除了手动抑制警告之外什么都不做