C è un linguaggio minimalista. Ti dà le ossa nude della programmazione. Ottieni variabili, loop e flusso di controllo. Questo è tutto. Se vuoi leggere da una tastiera o stampare su uno schermo, C non ha queste funzioni integrate. Devi scriverli o usare una libreria.
Questo è il motivo per cui le librerie in C sono così critiche. Sono pezzi di codice che i programmatori estraggono dai loro progetti per renderli riutilizzabili. Probabilmente hai utilizzato la libreria I/O standard, o stdio, senza pensarci. Ma oltre a ciò, ci sono librerie per matematica, stringhe e tempo. Puoi costruirne uno tuo.
La suddivisione del codice in moduli semplifica il test, il debug e la comprensione. Consente inoltre di riutilizzare la logica in diversi programmi. Diamo un’occhiata a come prendere uno script monolitico e trasformarne una parte in una funzione portabile.
Estrarre la logica da un monolite
Considera questo programma C. Riempie un array con numeri casuali, li ordina utilizzando un algoritmo di ordinamento a bolle e stampa i risultati.
La logica di ordinamento qui è sepolta all’interno di “main”. Per renderlo riutilizzabile, dobbiamo estrarre il bubble sort.
Creazione di una funzione di base
In questo esempio l’array “a” e la costante “MAX” sono globali. Ciò significa che la funzione di ordinamento non ha strettamente bisogno di parametri per accedervi. Tuttavia, la buona pratica impone di utilizzare variabili locali per i contatori del ciclo (x, y, t ) per mantenere la funzione autonoma.
Ecco il codice rifattorizzato. Abbiamo isolato la logica di ordinamento in “bubble_sort”.
Passi il numero di elementi a “bubble_sort” anziché a “MAX” come hardcoding. Funziona. Ma è ancora legato all’array globale “a”.
Generalizzare per una vera riusabilità
Una funzione è veramente riutilizzabile solo se non dipende dallo stato globale. Possiamo generalizzare ulteriormente bubble_sort passando l’array stesso come parametro.
Cambia la firma della funzione in:
Questo dice al compilatore di accettare un array di numeri interi di qualsiasi dimensione. Il corpo di “bubble_sort” non cambia. Basta aggiornare la chiamata in “main”:
Tieni presente che non utilizziamo &a nella chiamata di funzione. Potresti aspettarti di passare l’indirizzo perché l’ordinamento modifica l’array, ma in C gli array decadono in puntatori quando

















