#python #c
#python #c
Вопрос:
Я работаю с расширением C для Python, и из документации я знаю, что я должен использовать static
функции. Файлы организованы таким образом:
file1.c
#include "file1.h"
static int foo1(int a)
{
//Do someting with a
return a;
}
file1.h
static int foo1(int a);
file2.c
static int foo2(int b)
{
//Do someting with b
return b;
}
file2.h
static int foo2(int b);
extension.c
#include <Python.h>
#include "file1.h"
#include "file2.h"
static PyObject*
func(...)
{
int a, b, x, y;
...
x = foo1(a);
y = foo2(b);
...
}
static PyMethodDef methods[] =
{
{"func", func, METH_VARARGS, "Test function"},
...
{NULL, NULL, 0, NULL}
};
//Remaining Python C structures and functions
Я использую setup.py
setup
Extension
функции with и из setuptools
модуля. python setup.py build
Очевидно, что при запуске я получаю сообщение об ошибке, потому что функции foo1
и foo2
являются static
функциями, и файл extension.c
не может получить к ним доступ (на самом деле, я использую расширение без static
ключевого слова в функциях foo1
и foo2
).
Как мне поступить с static
ключевыми словами в моем случае?
Ответ №1:
В C «статические» функции не видны за пределами файла, в котором они определены.
Поэтому предлагаю:
не используйте модификатор ‘static’ для функций.