Ok, lo switch-case sarebbe un ottima soluzione ma...

poniamo che i file fun1.c , fun2.c , ecc. contengano l'implementazione in C di alcune funzioni matematiche. Poniamo cioè che questi file siano fatti sul modello del seguente esempio:
codice:
#include<math.h>

double fun(double *x)
{
    return sqrt(*x) * log(*x);
}
dove in questo caso la funzione matematica è radice quadrata di x * logaritmo naturale di x.

Bene. Se ora volessi che il mio file .c con la funzione main lavori su una generica funzione matematica (passata dall'utente come stringa tramite pagina HTML...) e visto che le funzioni matematiche sono infinite, dovrei in qualche modo (dopo aver fatto un parsing della stringa) scrivere il mio file fun di volta in volta sul server e quindi necessariamente ricompilarlo?

In altre parole, visto che non posso a priori scrivere un file funX.c per ogni possibile funzione matematica (dato che sono infinite...) devo in qualche modo fargli creare tale file a "run-time". E tale file per essere richiamato dal main e quindi eseguito andrà ovviamente compilato... giusto?

Voi come fareste? Soluzioni alternative?