作成日: 2023-08-03 (木)
from setuptools import setup, Extension
setup(
name="toymath",
ext_modules=[
Extension("toymath", ["toymathmodule.c"]),
]
)
#define PY_SSIZE_T_CLEAN
#include <Python.h>
// 利用したいCの関数
static int add(int a, int b) {
return a + b;
}
// addをラップした関数
static PyObject *toymath_add(PyObject *self, PyObject *args) {
int a, b;
if (!PyArg_ParseTuple(args, "ii", &a, &b)) {
return NULL;
}
int ret = add(a, b);
return PyLong_FromLong(ret);
}
// 公開する関数の情報
static PyMethodDef toymath_methods[] = {
{"add", toymath_add, METH_VARARGS, "Add integer values."},
{NULL, NULL, 0, NULL},
};
// モジュールの情報
static PyModuleDef toymath_module = {
PyModuleDef_HEAD_INIT,
"toymath",
"Toy mathematic functions.",
-1,
toymath_methods
};
// モジュールの初期化
// impoortされたときに呼び出される
// PyInit_xxxのxxxの部分は、モジュール名と一致させる
PyMODINIT_FUNC PyInit_toymath(void) {
return PyModule_Create(&toymath_module);
}