Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: MAFUS en 30 Julio 2019, 17:51 pm



Título: Creando nuevas keywords para C
Publicado por: MAFUS en 30 Julio 2019, 17:51 pm
El otro día, mientras aprendía Python, me fijé en foreach y range. Me pregunté si en C se podía tener una expresión parecida.

Y llegué a este ejemplo básico.

Código
  1. #include <stdio.h>
  2.  
  3. // Desde 1 hasta top. Haz lo que quiereas con el valor en medio ------------------------------
  4. #define foreach(var, top) for(int foreach_var = (top); var = f(foreach_var); foreach_var = 0)
  5.  
  6. int f(unsigned number) {
  7.    static unsigned top;
  8.    static unsigned actual;
  9.  
  10.    if(number != 0) {
  11.        top = number;
  12.        actual = 0;
  13.    }
  14.  
  15.    if(actual == top)
  16.        return 0;
  17.  
  18.    return ++actual;
  19. }
  20. // -------------------------------------------------------------------------------------------
  21.  
  22. int main(){
  23.    int x;
  24.  
  25.    /* Nueva funcionalidad */
  26.    foreach(x, 5) {
  27.        printf("%d\n", x);
  28.    }
  29. }

Lo dicho, es básico, pero se podría ir mejorando o hacer otras cosas, por supuesto.


Título: Re: Creando nuevas keywords para C
Publicado por: CalgaryCorpus en 30 Julio 2019, 18:17 pm
Usar variables static en la funcion evita que 2 foreach se puedan anidar correctamente.
Tal como esta, anidar foreach hara que la ultima aparicion de foreach cobre prepronderancia respecto a la o las anteriores.

Propongo evitar completamente la funcion y hacer

Código:
#define foreach(var,top) for(var=0; var < top; var++) 

(cambiando los valores de inicializacion y corte dependiendo de lo que se quiera)


Título: Re: Creando nuevas keywords para C
Publicado por: MAFUS en 30 Julio 2019, 19:32 pm
Pues sí, me gusta más así, compliqué demasiado las cosas sin necesidad.