Корректная работа со статическими функциями во многих файлах из расширения C для Python

#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’ для функций.