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.
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)
Pues sí, me gusta más así, compliqué demasiado las cosas sin necesidad.