#include <stdio.h>
 
typedef typeof(void (*)(int i[])) callback;
 
void bigfor(int levels, int i[], int size, callback cb) {
    int total_size = 1;
    for(int k = 0; k < levels; ++k) total_size *= size;
    
    for(int counter = 0; counter < total_size; ++counter) { // глобальный цикл
        for(int k = 1; k < levels; ++k) { // цикл по счётчикам
            if(i[k - 1] >= size) {
                i[k - 1] = 0;
                ++i[k];
            }
        }
        cb(i);
        ++i[0];
    }
}
 
void kukarek(int i[]) {
    printf("Koko! %d, %d, %d\n", i[0], i[1], i[2]);
}
 
int main() {
    int i[3] = {0, 0, 0};
    bigfor(3, i, 5, &kukarek);
    return 0;
}
