저는 지난 며칠 동안 파이썬 소스 코드를 읽었으며 이해하지 못한 것을 발견했습니다. "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