C+中的Python哨兵+;延伸 我正在研究一个用C++编写的Python扩展模块。

C+中的Python哨兵+;延伸 我正在研究一个用C++编写的Python扩展模块。,python,c++,sentinel,Python,C++,Sentinel,根据Python,模块方法表应该这样编写: static PyMethodDef SpamMethods[] = { ... {"system", spam_system, METH_VARARGS, "Execute a shell command."}, ... {NULL, NULL, 0, NULL} /* Sentinel */ }; static PyMethodDef SpamMethods[] = { ...

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

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 */
};
但我看到一些开发人员这样编写sentinel:

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下编译的,也没有问题。