typedef A (*AF)() 是什么意思?

What does typedef A (*AF)() mean?

我的主要编程语言 最近开源了。为了改进它,我正在研究用 C 编写的源代码。

但是我已经有很长 (!) 时间没读过或写过 C 语言了,那时我什至都不擅长。这个特定代码库的编写方式是......特殊的(许多 APL 解释器,其中有 J,其源代码是用高级 "APL style" 编写的,即使是用低级语言编写的;非常简洁,冗余回避、大量使用宏等)

目前,我正在尝试了解它使用的基本数据结构。最基本的是 the typedef A ("A" is for "array"):

typedef struct {I k,flag,m,t,c,n,r,s[1];}* A;

我明白了。但我正在努力思考 AF 是什么,两行之后:

typedef A (*AF)();

这个语法是什么意思?特别是,当事物后来声明为 "type AF" 时,这意味着什么? AF 只是指向 A 的指针吗?

我的直接目标是解释内存转储,其中包括 type V (for "verb") 的内容,其前两个成员是 AFs:

typedef struct {AF f1,f2;A f,g,h;I flag,mr,lr,rr,fdep;C id;} V;

但我的总体目标远不止于此,所以请详细说明 AF 定义中使用的语法。

AF 是函数指针的类型定义。具体来说,AF 指的是一个指向函数的指针,该函数采用未指定数量的参数,return 是 A.

类型的结果。

让我们忽略 A 实际上是什么。然后你有

typedef int (*AF)();

AF 是一个指向函数的指针(又名函数指针),它接受任意数量的参数和 returns 一个 int。显然,将int替换为A,除了return类型外,内容基本相同;因此,最终结果将 AF 限定为一个指向函数的指针,该函数接受任意数量的参数,并且 returning A,一个指向匿名结构的指针的别名。

有一个 interesting 站点可以帮助将复杂的声明转换为人类可读的文本。

正如已经回答的那样,AF数组函数)是指向函数的指针,returns 和 A数组对象指针)。

VVerb,即函数对象)的定义中,有两个AFv1 是指向 monadic 函数实现的指针,v2 是指向 dyadic 函数的指针。如果 V 表示一个运算符(副词),那么 v1v2 仍然分别是一元和二元实现,而且 f gh 可用于保存(柯里化)左 and/or 右参数。 mr lrrr 分别是一元秩、左秩和右秩。并且 id 持有一个 操作码 因此仍然可以从结构中恢复可打印的表示形式。

如果 f gh 中的任何操作数本身就是动词,则它们的 V 结构将位于 *f 之后的 f->k 个字节处,分别为 g 和 h,像所有 "payload data".

我发现对于理解 J 实现中的基本类型非常有用的 link 是 Roger Hui BAA talk notes (2.69M scanned pdf). And the full write-up is at Implementation of J (html).

您可能还会发现 my primitive clone instructive. See also my questions and