Я читал исходный код Python за последние пару дней, и я наткнулся на то, что я не понял. В файле abstract.c я нашел приведенный ниже фрагмент кода. Я думал, что понял, как это работает, но потом я понял, что понятия не имею, откуда берутся *v
и *w
. Может кто-нибудь объяснить, что происходит в этом коде, и пример того, как вы его используете?Использование #define с функциями
#define BINARY_FUNC(func, op, op_name) \
PyObject * \
func(PyObject *v, PyObject *w) { \
return binary_op(v, w, NB_SLOT(op), op_name); \
}
BINARY_FUNC(PyNumber_Or, nb_or, "|")
BINARY_FUNC(PyNumber_Xor, nb_xor, "^")
BINARY_FUNC(PyNumber_And, nb_and, "&")
BINARY_FUNC(PyNumber_Lshift, nb_lshift, "<<")
BINARY_FUNC(PyNumber_Rshift, nb_rshift, ">>")
BINARY_FUNC(PyNumber_Subtract, nb_subtract, "-")
BINARY_FUNC(PyNumber_Divmod, nb_divmod, "divmod()")
Они не приходят в любом месте, они просто буквальные части макроподстановок. Это имена, заданные параметрам определяемых функций. – Barmar
@ Бармар, вы должны сделать ответ. –
Это не что иное, как обычно определение функции: 'int f (int x, int y) {return x * y;)}'. 'x' и' y' определены только для этой функции. Чтобы полностью объяснить, что происходит, вы должны сообщить нам, как определяются 'binary_op' и' NB_SLOT'. – jerry