c j

¿Qué significa typedef A(* AF)()?



j (3)

Como ya se respondió, un AF ( función de matriz ) es un puntero a una función que devuelve una A (puntero de objeto de matriz ).

En la definición de V ( Verbo , es decir, objeto de función), hay dos AF s. v1 es un puntero a la implementación de la función monádica, y v2 es el puntero a la función diádica. Si la V representa un operador (adverbio), entonces v1 y v2 siguen siendo las implementaciones monádica y diádica respectivamente, pero también se pueden usar f g y h para mantener (izquierda) los argumentos a la izquierda y / o a la derecha. mr lr y rr son rango monádico, rango izquierdo y rango derecho respectivamente. Y el id contiene un código de operación para que una representación imprimible aún pueda recuperarse de la estructura.

Si alguno de los operandos en f g o h son verbos, su estructura V estará en f-> k bytes pasados ​​* f, respectivamente para g y h, como todos los "datos de carga útil".

Un enlace muy útil que encontré para comprender los tipos básicos en la implementación de J son las notas habladas de Roger Hui BAA (2.69M escaneado en pdf). Y el informe completo está en Implementación de J (html).

También puede encontrar mi clon primitivo instructivo. Vea también mis preguntas here y here .

Mi lenguaje de programación principal, j , fue recientemente de código abierto. Para mejorarlo, estoy estudiando la fuente, que está escrita en C.

Pero ha pasado mucho tiempo (!) Desde que leí o escribí C, y ni siquiera era bueno en eso. Y la forma en que se escribe esta base de código particular es ... idiosincrásica (muchos de los intérpretes de APL, J entre ellos, tienen su fuente escrita en "estilo APL" de alto nivel, incluso cuando están escritos en un lenguaje de bajo nivel; muy escasa, se evita la redundancia , uso intensivo de macros, etc.)

En este momento, estoy tratando de entender las estructuras de datos fundamentales que emplea. El más fundamental es el typedef A ("A" es para " array "):

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

que entiendo bien Pero estoy luchando para envolver mi cabeza en torno a lo que es la AF , dos líneas más tarde:

typedef A (*AF)();

¿Qué significa esta sintaxis? En particular, ¿qué significa cuando las cosas se declaran más tarde como "tipo AF"? ¿Es un AF simplemente un puntero a una A ?

Mi objetivo inmediato es interpretar volcados de memoria que incluyen cosas de tipo V (para " verb "), cuyos primeros dos miembros son AF s:

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

pero mi objetivo general es más grande que eso, así que por favor explique la sintaxis empleada en la definición de FA.


Ignoremos lo que realmente es A Entonces tienes

typedef int (*AF)();

AF es un puntero a función (también conocido como puntero de función) que toma cualquier número de argumentos y devuelve un int . Claramente, al sustituir int por A , el contenido es esencialmente el mismo, excepto el tipo de retorno; por lo tanto, el resultado final califica a AF como un puntero para funcionar tomando cualquier número de argumentos y devolviendo A , un alias para un puntero a una estructura anónima.

Hay un sitio interesting que podría ayudar a convertir declaraciones complejas en texto legible.


AF es un typedef para un puntero de función. Específicamente, AF refiere a un puntero a una función que toma un número no especificado de parámetros y devuelve un resultado de tipo A