Страж Python в расширении C++
Я работаю над модулем расширения Python, написанным на C++.
Согласно документации 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 */
};
Мой вопрос заключается в следующем: есть ли риск использовать сокращенную версию?
1 ответ
Класс pod, инициализированный с {}
имеет поля, не установленные в явном виде в ноль.
Если PyMethodDef
это стручок (простые старые данные), как я подозреваю, {NULL, NULL, 0, NULL}
будет генерировать те же данные, что и {}
,
Это верно как для C, так и для C++.
Если класс PyMethodDef
был не-под класс в C++11, {NULL, NULL, 0, NULL}
может сделать что-то другое, чем {}
, но я сильно сомневаюсь, что это так здесь.
Единственное, что меня беспокоит, так это если библиотека поменяется на меня, чтобы сделать PyMethodDef
не стручок, и решил сделать {}
не обнуляйте данные одновременно. Я считаю это маловероятным.