gpt4 book ai didi

c - (*) 在普通 C 中是什么意思?

转载 作者:太空狗 更新时间:2023-10-29 17:18:27 26 4
gpt4 key购买 nike

我无法理解以下语句中“(*)”表达式的含义:

#define PySpam_System \
(*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM])

在哪里

#define PySpam_System_NUM 0
#define PySpam_System_RETURN int
#define PySpam_System_PROTO (const char *command)

(摘自 http://docs.python.org/2/extending/extending.html)。那是什么意思? (请问一个愚蠢的问题)。类似于函数指针,但语法非常困惑。

更新:多亏了 Shahbaz 和 Jonathan,事情大体上变得清晰了,但我仍然无法理解两个细微差别:

  1. 为什么是 const char *command,而不仅仅是 const char *。我以为在函数指针类型声明和类型转换中应该省略参数的名称?所以它不能省略,而是可以吗?
  2. 为什么 (*(int (*)(const char *command)),而不仅仅是 (int (*)(const char *command)?目的是什么外部 (*[此处的所有其他内容])?这是函数指针到函数本身的可选取消引用,对吗?

最佳答案

PySpam_System_RETURN (*)PySpam_System_PROTO

扩展为:

int (*)(const char *command)

这是一个函数指针类型。所以基本上是以下内容:

(*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM])

转化为:

(*(int (*)(const char *command)) PySpam_API[0])

正在调用 PySpam_API[0] 的值,就好像它是一个带有 const char* 参数和 int 返回值的函数 (转换为函数指针)。请注意,这仍然缺少参数,因此使用宏的人应该为其​​提供参数,例如:

PySpam_System("some string");

关于您的更新:

  1. 参数名称是可选的。他们可能只是写了 const char *。我相信这个名字是为了清楚起见而写的。现在,无需查看其他任何地方,我就知道该函数需要一条命令,所以我想说这很有帮助。
  2. 再一次,你是对的。初始 * 取消引用函数指针。在 C 中,这是完全可选的。这样说会更对称,因为你正在取消引用一个指针,但是因为不取消引用一个函数指针没有意义,如果你不取消引用它不会有任何区别,C 会做唯一理智的事情为你。事实上,即使您使用 ****** 而不是一个,它仍然可以工作。

关于c - (*) 在普通 C 中是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15931757/

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