¿Funciones anidadas?

Iniciado por GGZ, 21 Noviembre 2016, 18:05 PM

0 Miembros y 1 Visitante están viendo este tema.

GGZ

Hola!, estuve buscando por internet pero todavía no me queda del todo claro, alguien sabe algo sobre funciones anidadas?


Algo como esto estoy buscando

void f( int a){

      int gg(char v){
            return 1;
     }
      gg('b');

}


Sí se que se lo puede pasar a ASM con gcc -S, de todos modos no entiendo los procedimientos que hace.


Saludos!
LET'S DO STUFF!!

cpu2

Quieres una traduccion en ASM?

GGZ

No, las diferentes formas de implementar funciones anidadas en ASM y la lógica de cada una de las implementaciones.
Si quisiera el código simplemente haría gcc -S ff.c, pero no es la única forma que hay de escribir funciones anidadas.
LET'S DO STUFF!!

MCKSys Argentina

Quizás ésto te pueda servir.

Saludos!
MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."


GGZ

No, ya lo había leído por arriba.
LET'S DO STUFF!!

cpu2

#5
Código (asm) [Seleccionar]
.section .text
.globl ___f

___f:

movb $0x62, %dil
callq _gg

;/////continuacion del code.... si no un ret

ret

_gg

movb $0x1, %al
ret


o

Código (asm) [Seleccionar]
.section .text
.globl ___f

___f:

jmp slt

__f2:

; continuacion de code si no un ret

ret

_gg

movb $0x1, %al
ret

slt:

movb $0x62, %dil
callq _gg

jmp __f2


No se si quieres algo asi, se podria hacer de muchas maneras.

La funcion f puede estar donde quieras, la ejecucion empezara donde dice .globl, da igual que f este arriba o abajo del todo.

Un saludo.