이 잘 컴파일 :긴 INT는 * np_intp하는 * 플랫폼에 의존 변환 내 64 비트 오피스 바탕 화면에서
#include <Python.h>
#include <numpy/arrayobject.h>
...
Py_Initialize();
import_array();
// Build array object
long int NUMEL=3;
PyObject *out_array = PyArray_SimpleNew(1, &NUMEL, NPY_DOUBLE);
을 반대로 내 32 비트 노트북에이 오류 생산 실패
error: invalid conversion from ‘long int*’ to ‘npy_intp* {aka int*}’ [-fpermissive]
PyArray_New(&PyArray_Type, nd, dims, typenum, NULL, NULL, 0, 0, NULL)
을
또는 int NUMEL=3
을 대신 선언하면 코드는 32 비트 컴퓨터에서는 컴파일되지만 64 비트 컴퓨터에서는 컴파일되지 않습니다. 나는 npy_intp
이 플랫폼에 종속되어 있다고 생각합니다. NUMEL
을 npy_intp
유형으로 정의 할 수 없기 때문에 (실제로 다른 C/C++ 전용 루틴에서 전달되는 것처럼), 조건부로 C++ 코드 내의 플랫폼에 따라 NUMEL
을 정의하는 방법이 있습니까?
감사합니다. 나는'stdint.h' (주로 자기 학습자)의 존재를 무시했다. 그래서 올바르게 입력했다면'NUMEL'은'intN_t' 타입으로 주어질 수 있습니다. 그러나'NUMEL'을'PyArray_SimpleNew'에 넘기는 함수는 반드시'intptr_t'로 전달해야합니다. 그럼에도 불구하고 이것은 intN_t에서 intptr_t 로의 캐스팅이 자동으로 수행되는 한 문제가되지 않습니다. – maurizio