過去幾天我一直在閱讀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
@Barmar,你應該做出答案。 –
它與通常定義一個函數沒有區別:'int f(int x,int y){return x * y;}}'。 'x'和'y'僅爲此功能定義。爲了充分解釋發生了什麼,你必須讓我們知道'binary_op'和'NB_SLOT'是如何定義的。 – jerry