8

如果我们想使用内部 Python API 将 C/C++ 集成到 python 中。那么函数的签名有以下形式

static PyObject *MyFunction( PyObject *self, PyObject *args );

static PyObject *MyFunctionWithKeywords(PyObject *self,
                             PyObject *args,
                             PyObject *kw);

static PyObject *MyFunctionWithNoArgs( PyObject *self );

为什么这些函数被实现为静态的?

4

4 回答 4

6

文档

因此,可移植性不需要对符号可见性做出任何假设。这意味着扩展模块中的所有符号都应该被声明static,除了模块的初始化函数,以避免与其他扩展模块的名称冲突(如模块的方法表和初始化函数部分所述)。这意味着应该可以从其他扩展模块访问的符号必须以不同的方式导出。

于 2013-09-11T15:35:09.097 回答
2

所以你在问什么static意思。

这意味着这些函数仅在声明它们的文件中可用,以免与其他定义冲突并污染命名空间。

这些文件是静态文件的原因是,这些是所有 python 函数将被映射的,看看它们如何覆盖所有可能的函数声明的排列。这些只能在该文件中创建。

于 2013-09-11T15:34:13.123 回答
0

因此它们仅在定义它们的文件中可用。不污染全局命名空间。

于 2013-09-11T15:32:41.950 回答
0

C 中函数之前的关键字static意味着该函数在定义它的翻译单元(大致是包含头文件之后的源文件)之外不可见。它为函数提供“内部链接”(用 C 语言),因此它是文件的“私有”。

于 2013-09-11T15:33:45.103 回答