void ( *signal( int signum, void (*handler)(int) ) ) (int) E' una funzione che accetta come parametri : 1. un intero 2. un puntatore a funzione che accetta un intero e restituisce void. e restituisce un puntatore a funzione che accetta un int e valore ritorno void. -------------------------------------------------------------------------------------------------- >int (*signal (int sig, void (*funz) (int)))(int); > >la dscrizione dice che signal è una funzione che restituisce un puntatore (e >questo è chiaro ed evidente) ma poi dice che questo puntatore è ad una >funzione che restituisce un intero (mentre funz nella chiamata è dichiarata >void) > >Infine non capisco davvero il enso di (int) alla fine del costrutto Leggi la dichiarazione come se fosse: int (*signal(a,b))(int); Per ora non ti interessa sapere cosa siano a e b. Le parentesi attorno ad a e b hanno precedenza maggiore rispetto all'asterisco, per cui, dato: k = signal(a,b) si puo' scrivere: int (*k)(int); k e', banalmente, un puntatore a funzione che accetta un intero e restituisce un intero. Ma k e' il risultato della signal(a,b), per cui si puo' dire che "signal e' una funzione che accetta a e b e restituisce un puntatore a funzione che accetta un intero e restituisce un intero". Adesso, banalmente, risolvi a e b, dicendo che : "signal e' una funzione che accetta un intero (a) e un puntatore a funzione che accetta un intero e non restituisce nulla (b) e restituisce un puntatore a funzione che accetta un intero e restituisce un intero".