Ciao a tutti, sto trovando molte difficoltà nella definizione di una macro per il calcolo del fattoriale. Non ho mai sviluppato macro "complesse", e non capisco come potrei fare per definirla. Sono partito da una definizione mediante funzione ricorsiva del problema, ovvero:

codice:
int fact(x){
    if(x == 1) return x;
   return x*(fact(x-1));
}
Quindi pensavo di definire la macro in questo modo, ovvero ricorsivamente:

codice:
#define fact(x) \
(x*(fact(x-1))
Tuttavia quando viene espansa, fact(x-1) non viene risolta (come definito nello standard ANSI) e non riesco a trovare una soluzione a questo problema. Non credo di poter usare un ciclo nella definizione, e quindi devo cercare di risolvere la macro in una forma simile a questa:

codice:
#define fact(x) ((x==0) ? x : x*(x-1))
In questo modo però moltiplico solo i primi due valori (ovvero x e x-1). Come devo procedere per espandere anche gli altri valori, fino a che non arrivo ad avere x=1 ?