Il C è un linguaggio essenziale. Ti dà il metallo nudo. Non include nemmeno le funzioni per leggere da una tastiera o scrivere su uno schermo. Se lo vuoi, devi costruirlo.
Tutto ciò che va oltre le basi assolute vive nelle biblioteche.
Conosci la libreria stdio. Gestisce input e output standard. Ce ne sono altri per la matematica. Gestione delle stringhe. Manipolazione del tempo. Esistono quindi non devi reinventare la ruota ogni volta che inizi un nuovo progetto.
Ma perché fermarsi a ciò che prevede la norma?
L’inserimento del codice nelle librerie lo rende riutilizzabile. Ti consente di dividere enormi programmi in moduli gestibili. Più facile da testare. Più facile da eseguire il debug. Puoi estrarre il codice dai tuoi vecchi progetti e inserirlo in quelli nuovi senza copiare e incollare blocchi di logica.
Diamo un’occhiata a come farlo.
Estrarre la logica in funzioni
Prendiamo un programma C standard che riempia un array con numeri casuali e li ordini. Ecco il codice grezzo:
Questo codice fa tre cose. Riempie un array con numeri casuali. Li ordina utilizzando un bubble sort. Stampa il risultato.
Per creare una libreria riutilizzabile, dobbiamo isolare la logica di ordinamento.
Passo uno: generalizzare l’ordinamento
Estrai il codice di ordinamento delle bolle. Trasformalo in una funzione.
Poiché l’array “a” e la costante “MAX” sono globali, la funzione inizialmente non necessita di parametri. Inoltre, non è necessario che restituisca un valore. Usa semplicemente le variabili locali per “x”, “y” e “t”.
Ora aggiorna main per chiamare questa funzione invece di eseguire il ciclo inline.
Funziona. Ma è ancora legato a un array globale.
Passo due: passare l’array
Possiamo rendere la funzione di ordinamento veramente generica. Passa l’array stesso come parametro.
La firma cambia in:
Questo dice al compilatore di accettare un array di numeri interi di qualsiasi dimensione. Il corpo della funzione rimane esattamente lo stesso. Basta aggiornare la chiamata in “main”:
Noti qualcosa di strano? Passiamo “a”, non “&a”.
Anche se la funzione di ordinamento modifica l’array, qui non abbiamo bisogno dell’operatore indirizzo di. Sembra controintuitivo se sei abituato a lingue che passano per valore. Potresti chiederti perché funziona senza puntatori esplicitamente nella chiamata.
È perché in C gli array decadono in puntatori quando vengono passati alle funzioni. La funzione riceve un riferimento all’inizio dell’array in memoria. Ecco perché può modificare i dati originali.
Comprendere questa distinzione è la via per padroneggiare i puntatori. Senza di essa, le librerie C sono solo blocchi statici di codice. Con esso, stai costruendo sistemi modulari e portatili.























