¿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