Menu
Coddy logo textTech

Funzioni statiche

Fa parte della sezione Programmazione orientata agli oggetti del percorso C di Coddy. Lezione 4 di 61.

Quando suddividi il codice in più file, ogni funzione definita in un file sorgente è visibile per impostazione predefinita agli altri file. Ma a volte hai bisogno di funzioni di supporto da usare solo internamente: funzioni a cui gli altri file non dovrebbero accedere e di cui non dovrebbero nemmeno essere a conoscenza.

La parola chiave static, quando viene applicata a una funzione, ne limita la visibilità al file in cui è definita. Questo crea una funzione privata che non può essere chiamata da altri file sorgente, anche se qualcuno prova a dichiararla.

// math_utils.c
#include "math_utils.h"

// Funzione ausiliaria privata - visibile solo in questo file
static int square(int x) {
    return x * x;
}

// Funzione pubblica - può essere chiamata da main.c
int sum_of_squares(int a, int b) {
    return square(a) + square(b);
}

In questo esempio, sum_of_squares è dichiarata nell’header e può essere usata ovunque. Tuttavia, square è contrassegnata come static, quindi esiste solo all’interno di math_utils.c. Se main.c prova a chiamare direttamente square(), il linker genererà un errore: la funzione semplicemente non esiste al di fuori del suo file.

Questo è il modo in cui C realizza l'incapsulamento a livello di file. Le funzioni statiche ti permettono di nascondere i dettagli di implementazione, mantenendo pulita la tua interfaccia pubblica e usando internamente la logica di supporto di cui hai bisogno.

challenge icon

Sfida

Facile

Creiamo un calcolatore di distanza che usa una funzione di supporto privata per calcolare il quadrato di un numero: un dettaglio che dovrebbe rimanere nascosto al resto del programma.

Creerai tre file:

  • distance.h: il tuo file header, che dichiara una sola funzione pubblica distance_squared che accetta quattro numeri interi (x1, y1, x2, y2), rappresentanti due punti, e restituisce un numero intero. Includi le protezioni contro le inclusioni multiple usando il simbolo DISTANCE_H.
  • distance.c: il tuo file sorgente contenente l'implementazione. Crea una funzione di supporto static chiamata square che accetta un numero intero e ne restituisce il quadrato. Questa funzione di supporto dovrebbe essere visibile solo all'interno di distance.c. Poi implementa distance_squared usando la funzione di supporto statica per calcolare (x2-x1)² + (y2-y1)².
  • main.c: il tuo file principale, che include l'header e usa la funzione pubblica. La funzione di supporto square non dovrebbe essere accessibile qui: è disponibile solo distance_squared.

La funzione distance_squared calcola la distanza euclidea al quadrato tra due punti. Rendendo statica la funzione square, nascondi questo dettaglio di implementazione a tutto il codice che si trova al di fuori di distance.c.

Riceverai quattro valori interi in input: x1, y1, x2 e y2.

Stampa la distanza al quadrato in questo formato:

Squared distance: {result}

Ad esempio, con i punti (0, 0) e (3, 4), l'output sarebbe:

Squared distance: 25

Provalo tu

#include <stdio.h>
#include "distance.h"

int main() {
    int x1, y1, x2, y2;
    scanf("%d", &x1);
    scanf("%d", &y1);
    scanf("%d", &x2);
    scanf("%d", &y2);
    
    // TODO: Chiama distance_squared con le coordinate inserite
    // e stampa il risultato nel formato: "Squared distance: {result}"
    
    return 0;
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Programmazione orientata agli oggetti

Esercitati da solo: Compilatore C online