gpt4 book ai didi

c - 将#define 与函数一起使用

转载 作者:太空宇宙 更新时间:2023-11-04 02:56:41 25 4
gpt4 key购买 nike

最近几天我一直在阅读 Python 源代码,但我遇到了一些我不明白的地方。在“abstract.c”文件中,我找到了以下代码片段。我以为我了解它是如何工作的,但后来我意识到我不知道 *v*w 从何而来。有人可以解释一下这段代码中发生了什么,以及您将如何使用它的示例吗?

#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()")

最佳答案

vw 不是宏参数,它们是扩展的文字部分。宏扩展为一个函数定义,函数接受参数——它们总是命名为 vw,它们的类型为 PythonObject *。例如:

BINARY_FUNC(PyNumber_Or, nb_or, "|")

扩展为:

PythonObject *
PyNumber_Or(PyObject *v, PyObject *w) {
return binary_op(v, w, NB_SLOT(nb_or), "|");
}

关于c - 将#define 与函数一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16571579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com