Numpy CAPI PyArray_New Visual Studio警告C4055

时间:2016-10-18 21:05:17

标签: python c visual-studio numpy python-c-api

我正在使用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

1 个答案:

答案 0 :(得分:1)

好的,所以在深入研究PyArray_SimpleNew()的Python源代码后,似乎python正在使用嵌套的Macro,并在场景后面进行一些函数回调。因此,编译器看到的是指向函数的指针而不是PyObject *类型的正确返回值。这是非标准用法,除了手动抑制警告之外什么都不做