gpt4 book ai didi

python - 将具有十六进制值的符号常量添加到 Python 扩展模块

转载 作者:太空宇宙 更新时间:2023-11-03 23:27:14 25 4
gpt4 key购买 nike

我在我的头文件中将一些值定义为符号常量:

#define NONE 0x00
#define SYM 0x11
#define SEG 0x43
...

这些值的名称代表某种数据类型。

现在在我当前的模块实现中,我将所有这些符号链接(symbolic link)放入一个数组中

static unsigned char TYPES[] = { NONE, SYM, SEG, ...}

并将类型在数组中的位置添加为模块中的 int 常量。

PyMODINIT_FUNC initShell(void)
{
PyObject *m;

m= Py_InitModule3("Sample", sample_Methods,"Sample Modules");
if (m == NULL)
return;
...

PyModule_AddIntConstant(m, "NONE", 0);
PyModule_AddIntConstant(m, "SYM", 1);
PyModule_AddIntConstant(m, "SEG", 2);
...
}

当调用函数时,我必须做类似的事情:

static PyObject *py_samplefunction(PyObject *self, PyObject *args, PyObject *kwargs) {

int type;
if (!PyArg_ParseTuple(args,kwargs,"i",&type)
return NULL;

int retc;
retc = sample_function(TYPES[type]);
return Py_BuildValue("i", retc);
}

我对这个 hack 不是很满意,我认为它很容易出错,所以我基本上是在寻找一种解决方案,它可以消除数组并允许在函数调用中直接使用常量。有什么建议吗?

编辑

使用 PyModule_AddIntMacro(m, SEG); 并调用示例函数解决了这个问题:

static PyObject *py_samplefunction(PyObject *self, PyObject *args, PyObject *kwargs) {

int type;
if (!PyArg_ParseTuple(args,kwargs,"i",&type)
return NULL;

int retc;
retc = sample_function((unsigned char) type);
return Py_BuildValue("i", retc);
}

最佳答案

为什么不直接将常量添加到模块中?

PyModule_AddIntMacro(m, SYM);

关于python - 将具有十六进制值的符号常量添加到 Python 扩展模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23788140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com