gpt4 book ai didi

C++ 扩展中的 Python 哨兵

转载 作者:行者123 更新时间:2023-11-30 03:53:00 28 4
gpt4 key购买 nike

我正在研究用 C++ 编写的 Python 扩展模块。

根据 Python documentation模块方法表应该这样写:

static PyMethodDef SpamMethods[] = {
...
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
...
{NULL, NULL, 0, NULL} /* Sentinel */
};

但是我看到有些开发者是这样写哨兵的:

static PyMethodDef SpamMethods[] = {
...
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
...
{} /* Sentinel */
};

我的问题是使用简化版有风险吗?

最佳答案

使用 {} 初始化的 pod 类具有未明确设置为零的字段。

如果 PyMethodDef 是 pod(普通旧数据),正如我所怀疑的那样,{NULL, NULL, 0, NULL} 将生成与 {

在 C 和 C++ 中都是如此。

如果 PyMethodDef 类是 C++11 中的非 pod 类,{NULL, NULL, 0, NULL} 可以做一些与 不同的事情{},但我强烈怀疑这里是这种情况。

我唯一担心的是,如果库对我进行了更改,使 PyMethodDef 成为非 pod,并选择让 {} 不将数据归零同时。我会发现这不太可能。

关于C++ 扩展中的 Python 哨兵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30359255/

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