Menu
Coddy logo textTech

Fonctions statiques

Fait partie de la section Programmation Orientée Objet du Journey C de Coddy. Leçon 4 sur 61.

Lorsque vous répartissez le code entre plusieurs fichiers, chaque fonction définie dans un fichier source est visible par défaut par les autres fichiers. Mais vous avez parfois besoin de fonctions auxiliaires qui ne doivent être utilisées qu’en interne : des fonctions auxquelles les autres fichiers ne devraient pas accéder, ni même savoir qu’elles existent.

Le mot-clé static, lorsqu’il est appliqué à une fonction, limite sa visibilité au fichier dans lequel elle est définie. Cela crée une fonction privée qui ne peut pas être appelée depuis d’autres fichiers source, même si quelqu’un essaie de la déclarer.

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

// Helper privé - uniquement visible dans ce fichier
static int square(int x) {
    return x * x;
}

// Fonction publique - peut être appelée depuis main.c
int sum_of_squares(int a, int b) {
    return square(a) + square(b);
}

Dans cet exemple, sum_of_squares est déclaré dans l’en-tête et peut être utilisé n’importe où. Cependant, square est marqué static, il n’existe donc que dans math_utils.c. Si main.c essaie d’appeler directement square(), l’éditeur de liens produira une erreur : la fonction n’existe tout simplement pas en dehors de son fichier.

C’est la manière dont le C实现 l’encapsulation au niveau du fichier. Les fonctions statiques vous permettent de masquer les détails d’implémentation, en gardant votre interface publique claire tout en utilisant toute la logique auxiliaire dont vous avez besoin en interne.

challenge icon

Défi

Facile

Construisons un calculateur de distance qui utilise une fonction auxiliaire privée pour calculer le carré d’un nombre : un détail qui doit rester caché au reste de votre programme.

Vous allez créer trois fichiers :

  • distance.h : votre fichier d’en-tête déclarant une seule fonction publique distance_squared qui prend quatre entiers (x1, y1, x2, y2) représentant deux points et renvoie un entier. Des protections contre les inclusions multiples utilisant le symbole DISTANCE_H.
  • distance.c : votre fichier source contenant l’implémentation. Créez une fonction auxiliaire static appelée square qui prend un entier et renvoie son carré. Cette fonction auxiliaire ne doit être visible qu’à l’intérieur de distance.c. Implémentez ensuite distance_squared en utilisant votre fonction auxiliaire statique pour calculer (x2-x1)² + (y2-y1)².
  • main.c : votre fichier principal qui inclut l’en-tête et utilise la fonction publique. La fonction auxiliaire square ne doit pas être accessible ici : seule distance_squared est disponible.

La fonction distance_squared calcule la distance euclidienne au carré entre deux points. En gardant la fonction square statique, vous masquez ce détail d’implémentation pour tout code situé en dehors de distance.c.

Vous recevrez quatre entrées entières : x1, y1, x2 et y2.

Affichez la distance au carré dans ce format :

Squared distance: {result}

Par exemple, avec les points (0, 0) et (3, 4), la sortie serait :

Squared distance: 25

Essayez vous-même

#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: Appeler distance_squared avec les coordonnées d'entrée
    // and print the result in the format: "Squared distance: {result}"
    
    return 0;
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Programmation Orientée Objet

Entraînez-vous par vous-même : Compilateur C en ligne