elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C-ASM] Pila
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C-ASM] Pila  (Leído 1,347 veces)
GGZ

Desconectado Desconectado

Mensajes: 144



Ver Perfil
[C-ASM] Pila
« en: 21 Noviembre 2016, 01:58 am »

¿Podrían explicarme un poco mejor como es que funciona stack y hacer_stack?
Código
  1. #include <stdlib.h>
  2. #include <setjmp.h>
  3.  
  4. #define TPILA 4096
  5. #define NPILAS 10
  6.  
  7. static void hace_stack(jmp_buf buf, void (*pf)(), unsigned prof, char *dummy) {
  8.  
  9.        printf ("prof: %d\n",prof);
  10.        printf ("dummy: %d\n",dummy-(char*) &prof );
  11.  
  12.  
  13.        if( dummy - (char *) &prof >= prof) {
  14.                if (setjmp(buf)!=0) {
  15.                        pf(); abort();
  16.                }
  17.        } else hace_stack(buf, pf, prof, dummy);
  18. }
  19.  
  20. void stack(jmp_buf buf, void (*pf)()) {
  21.        static int ctas = NPILAS;
  22.        char dummy;
  23.        hace_stack(buf, pf, TPILA*ctas, &dummy);
  24.        ctas--;
  25. }
  26.  

Código
  1. #include <stdio.h>
  2. #include "guindows.h"
  3.  
  4. task t1, t2, taskmain;
  5.  
  6. void ft1(){
  7. double d;
  8. for(d=-1;;d+=0.001) {
  9. printf("d=%f\n", d);
  10. TRANSFER(t1,t2);
  11. }
  12. }
  13.  
  14. void ft2(){
  15. int i;
  16. for(i=0;i<10000;i++) {
  17. printf("i=%d\n", i);
  18. TRANSFER(t2,t1);
  19. }
  20. TRANSFER(t2, taskmain);
  21. }
  22.  
  23. main(){
  24. stack(t1,ft1);
  25. stack(t2,ft2);
  26. TRANSFER(taskmain,t1);
  27. return 0;
  28. }
  29.  


¿Para qué carajos sirve esto?
Código
  1.        if( dummy - (char *) &prof >= prof) {
  2.                if (setjmp(buf)!=0) {
  3.                        pf(); abort();
  4.                }
  5.        } else hace_stack(buf, pf, prof, dummy);

Me parece una forma muy rara de codear (char *)&prof sé lo que significa pero no entiendo para que sirve.

Todo lo de guindows.h lo entiendo.


« Última modificación: 21 Noviembre 2016, 02:00 am por GGZ » En línea

LET'S DO STUFF!!
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
La pila
Electrónica
Sardi 1 4,263 Último mensaje 6 Noviembre 2003, 04:22 am
por Meta
Pila en C++
Programación C/C++
Norochii 1 5,786 Último mensaje 25 Mayo 2011, 20:24 pm
por Acermax
Una pila en C
Programación C/C++
Dark Invader 4 3,648 Último mensaje 25 Junio 2011, 19:40 pm
por Dark Invader
que es una pila?
Programación General
TR NOvato 3 2,215 Último mensaje 30 Marzo 2017, 02:09 am
por TR NOvato
Ejercicio de Pila
Java
padiuwu 1 1,641 Último mensaje 8 Marzo 2019, 20:18 pm
por spcruzaley
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines