Creando nuevas keywords para C

Iniciado por MAFUS, 30 Julio 2019, 17:51 PM

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

MAFUS

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.


#include <stdio.h>

// Desde 1 hasta top. Haz lo que quiereas con el valor en medio ------------------------------
#define foreach(var, top) for(int foreach_var = (top); var = f(foreach_var); foreach_var = 0)

int f(unsigned number) {
    static unsigned top;
    static unsigned actual;

    if(number != 0) {
        top = number;
        actual = 0;
    }

    if(actual == top)
        return 0;

    return ++actual;
}
// -------------------------------------------------------------------------------------------

int main(){
    int x;
   
    /* Nueva funcionalidad */
    foreach(x, 5) {
        printf("%d\n", x);
    }
}


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

CalgaryCorpus

#1
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

#define foreach(var,top) for(var=0; var < top; var++)


(cambiando los valores de inicializacion y corte dependiendo de lo que se quiera)
Aqui mi perfil en LinkedIn, invitame un cafe aqui

MAFUS

Pues sí, me gusta más así, compliqué demasiado las cosas sin necesidad.