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

时间:2015-08-11 17:36:47

标签: c j

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

但是自从我读过或写过C以来,这已经很久了(!),而我当时并不擅长。编写这个特定代码库的方式是......特殊的(许多APL解释器,其中的J,其源代码以高级“APL风格”编写,即使用低级语言编写;非常简洁,冗余避免,重大的宏观使用等。)

目前,我正在尝试了解它采用的基本数据结构。最基本的一个是the typedef A(“A”代表“array”):

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

我理解很好。但是我正在努力绕过AF是什么,后两行:

typedef A (*AF)();

这种语法是什么意思?特别是,当事情后来被宣布为“AF型”时,它意味着什么? AF只是指向A

的指针

我的直接目标是解释包含type V(对于“verb”)的内存转储,其前两个成员是AF s:

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

但是我的总体目标比这更大,所以请详细说明AF定义中使用的语法。

3 个答案:

答案 0 :(得分:13)

AF是函数指针的typedef。具体来说,AF引用指向函数的指针,该函数接收未指定数量的参数并返回类型A的结果。

答案 1 :(得分:13)

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

V动词,即。函数对象)的定义中,有两个AFv1是指向monadic函数实现的指针,v2是指向二元函数的指针。如果V代表运算符(副词),那么v1v2仍然分别是monadic和dyadic实现,还有f g和{{ 1}}可用于保存(curried)左和/或右参数。 h mrlr分别是monadic-rank,left-rank和right-rank。并且rr拥有操作码,因此仍然可以从结构中恢复可打印的表示。

如果id fg中的任何操作数本身都是动词,则它们的h结构将分别位于超过* f的f-> k字节处对于g和h,就像所有“有效载荷数据”一样。

我发现了一个非常有用的链接,用于理解J实现中的基本类型是Roger Hui BAA talk notes(2.69M扫描pdf)。完整的文章是Implementation of J(html)。

您可能还会发现my primitive clone具有指导意义。另请参阅我的问题herehere

答案 2 :(得分:12)

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

typedef int (*AF)();

AF是一个指向函数的指针(也就是函数指针),它接受任意数量的参数并返回int。显然,通过用int替换A,除了返回类型之外,内容基本相同;因此,最终结果将AF限定为函数的指针,该函数接受任意数量的参数并返回A,这是指向匿名结构的指针的别名。

有一个interesting网站可以帮助您在人类可读的文本中转换复杂的声明。