Array pseudo-associativi in C

Da un problema sollevato da un mio collega mi sono trovato a sviluppare una banale soluzione che implementa una sorta di array associativi in C.

/*
* il nome della funzione deve essere del formato
*
* XXXXXXXX_NN
*
* XXXXXXXX è una stringa di LABEL_LENGTH caratteri
* _ è il carattere separatore
* NN è un numero decimale formattato a due cifre (Es. 01, 05, 22)
*
* NN può valere minimo 00 e massimo 99 per un numero massimo
* di 100 funzioni/puntatori
*
*/
//
// Lunghezza del nome della funzione fino al carattere "_"
#define LABEL_LENGTH 8
#define _(x) (((x[LABEL_LENGTH + 1] - 48) * 10) + (x[LABEL_LENGTH + 2] - 48))
//
void miafunzi_01()
{
printf("questa è la mia funzionen");
return;
}
//
void altrafun_02()
{
printf("questa è un'altra mia funzionen");
return;
}
//
void altrafun_10()
{
printf("questa è un'altra mia funzione 10n");
return;
}
//
void altrafun_11()
{
printf("questa è un'altra mia funzione 11n");
return;
}
//
int main(void)
{
void (*fn_ptr[256])(void) = {
(void*)0, // 0
miafunzi_01, // 1
altrafun_02, // 2
(void*)0, // 3
(void*)0, // 4
(void*)0, // 5
(void*)0, // 6
(void*)0, // 7
(void*)0, // 8
(void*)0, // 9
altrafun_10, // 10
altrafun_11 // 11
};
fn_ptr[_("miafunzi_01")]();
fn_ptr[_("altrafun_02")]();
fn_ptr[_("altrafun_10")]();
fn_ptr[_("altrafun_11")]();
}

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...