파이썬 C 확장을 사용하기 시작한 이유는 파이썬에서 호출 할 수있는 C 함수가 2 개의 PyObject * 인수 PyObject *를 반환합니다. 나는 다음에 "Hello World"확장자를 썼다 :파이썬 C 확장 기능 - 호출 가능한 C 함수가 인수를 가져와 PyObject를 반환해야하는 이유 *
#include <Python.h>
static PyObject *
hello_world(PyObject *self, PyObject *noargs)
{
printf("Hello World\n");
return Py_BuildValue("");
}
// Module functions table.
static PyMethodDef
module_functions[] = {
{ "hello_world", hello_world, METH_NOARGS, "hello world method" },
{ NULL }
};
// This function is called to initialize the module.
PyMODINIT_FUNC
inittesty2(void)
{
Py_InitModule("testy2", module_functions);
}
수없는 이유는 I (특히 METH_NOARGS와) 다음 그래서 hello_world 방법을 사용
static void
hello_world()
{
printf("Hello World\n");
}
를?
'PyNone'이 아니라'Py_None'입니다. 또한'Py_RETURN_TRUE' 및'Py_RETURN_FALSE'와 비슷한'Py_RETURN_NONE'도 있습니다. – yak
(3) 들어, 만약 내가 틀렸어하지만 코드가 모든 args가 스택에 전달되고 호출 수신자 (함수)가 스택에서 팝하는 호출 규칙을 사용했다면 사용하지 않는 인수를 제거하면 충돌은 파이썬이 항상 두 번째 인자로 NULL을 전달할 것이고 함수는 그것을 팝하지 않기 때문입니다. – yak
@yak 코드에 크래시가 발생하지 않습니다. – jogojapan