Learning GNU C: le funzioni annidate | OTHER chapters | |||
Trucchi da usare con le funzioni
GCC permette di definire funzioni all'interno di altre funzioni. Le funzioni così definite sono conosciute come "funzioni annidate" ( nested function ) ed obbediscono alle stesse regole sullo scope ( portata ) applicate alle variabili. Quando la funzione "parent" ( padre ) si chiude, la funzione "child" ( figlio ) perde il suo scope ( portata ) e risulta indisponibile. Probabilmente, la ragione principale per l'inserimento, da parte di GCC, delle funzioni annidate è legata alla flessibilità: è, infatti, possibile guadagnare qualcosa in termini di prestazione, utilizzando le funzioni annidate in modo corretto. Le funzioni annidate obbediscono al cosiddetto "Lexical scope", per il quale è possibile, per la funzione stessa, accedere alle variabili contenute nella funzione. Per questa ragione, le funzioni annidate possono eseguire operazioni che, normalmente, prevedono l'uso di puntatori, come argomenti. L'utilizzo dei puntatori comporta una lieve perdita in termini prestazionali, visto che un puntatore non può essere memorizzato in un registro del computer. I puntatori non puntano mai ai registri della macchina. Ecco un semplice esempio di funzione annidata:
Non è necessario dichiarare le funzioni annidate, come si fa con le funzioni normali, ma, se preferite, è possibile farlo. Il solo motivo per farlo potrebbe essere l'amore per la leggibilità del codice: potreste preferire di vedere la definizione di una funzione, là dove quella funzione viene usata. Sta a voi: se decidete di dichiarare una funzione annidata, ricordate di dichiararla esplicitamente come "auto". Le funzioni annidate hanno una portata ( scope ) locale: dichiararle come "extern" produrrà un errore. "static" e "inline", invece, sono entrambi leciti, anche se mi sfugge il significato di "static". Le variabili a portata lessicale ( lexical scope ) vivono solo nel blocco di codice in cui appaiono: forse, è per questo che vengono definite con il termine "lessicale", ad indicare che sono legate al testo del codice.
|
||||
Learning GNU C: le funzioni annidate | Disclaimer: this link points to content provided by other sites. |