So I have below sample code for extending python with C
#include <python.h>
static PyObject* sayhello(PyObject* self, PyObject *args) {
const char* name;
if (!PyArg_ParseTuple(arg, "s", &name))
return NULL;
printf("Hello %s !\n", name);
Py_RETURN_NONE;
}
static PyMethodDef HelloMethods[] =
{
{"say_hello", say_hello, METH_VARARGS, "Greet Somebody."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC inithello(void) {
(void) Py_InitModule("hello", HelloMethods);
}
And My question is why below wrapper function static
static PyObject* sayhello(PyObject* self, PyObject *args) {
A function in C can be kept static if it does not need to be referred to/linked by name outside its source file. In this case, the Python linkage is accomplished using references within the source file so no external links are needed. The code would work just as well if the function was externally visible but why pollute your name space?