簡體   English   中英

C ++擴展中的Python哨兵

[英]Python sentinel in C++ extension

我正在研究用C ++編寫的Python擴展模塊。

根據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 */
};

我的問題是以下使用縮短版本會有風險嗎?

{}初始化的Pod類的字段未明確設置為零。

如果我懷疑PyMethodDef是pod(純舊數據),則{NULL, NULL, 0, NULL}會生成與{}相同的數據。

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

如果類PyMethodDef在C ++ 11中是非Pod類,則{NULL, NULL, 0, NULL}可以做的事與{}不同,但是我強烈懷疑這種情況。

我唯一需要擔心的是,如果庫改變了我的身份,使PyMethodDef成為非Pod,並選擇使{}不將數據歸零。 我認為這不太可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM