Додому Internet et informatique Programmation Créer des bibliothèques C personnalisées à partir de zéro

Créer des bibliothèques C personnalisées à partir de zéro

5

C est un langage épuré. Cela vous donne le métal nu. Il n’inclut même pas les fonctions permettant de lire sur un clavier ou d’écrire sur un écran. Si vous voulez cela, vous devez le construire.

Tout ce qui va au-delà des bases absolues se trouve dans les bibliothèques.

Vous connaissez la bibliothèque stdio. Il gère les entrées et sorties standard. Il y en a d’autres pour les mathématiques. Gestion des chaînes. Manipulation du temps. Ils existent pour que vous n’ayez pas à réinventer la roue à chaque fois que vous démarrez un nouveau projet.

Mais pourquoi s’arrêter à ce que prévoit la norme ?

Mettre du code dans des bibliothèques le rend réutilisable. Il vous permet de diviser des programmes volumineux en modules gérables. Plus facile à tester. Plus facile à déboguer. Vous pouvez extraire le code de vos anciens projets et le déposer dans de nouveaux sans copier-coller de blocs de logique.

Voyons comment procéder.

Extraction de la logique dans les fonctions

Prenez un programme C standard qui remplit un tableau de nombres aléatoires et les trie. Voici le code brut :

Ce code fait trois choses. Il remplit un tableau de nombres aléatoires. Il les trie à l’aide d’un tri à bulles. Il imprime le résultat.

Pour créer une bibliothèque réutilisable, nous devons isoler la logique de tri.

Première étape : généraliser le tri

Extrayez le code de tri des bulles. Transformez-le en fonction.

Puisque le tableau « a » et la constante « MAX » sont globaux, la fonction n’a pas besoin de paramètres au départ. Il n’est pas non plus nécessaire de renvoyer une valeur. Utilisez simplement des variables locales pour « x », « y » et « t ».

Mettez maintenant à jour main pour appeler cette fonction au lieu d’exécuter la boucle en ligne.

Ça marche. Mais cela reste lié à un ensemble mondial.

Deuxième étape : passer le tableau

Nous pouvons rendre la fonction de tri véritablement générique. Passez le tableau lui-même en paramètre.

La signature devient :

Cela indique au compilateur d’accepter un tableau d’entiers de n’importe quelle taille. Le corps de la fonction reste exactement le même. Vous venez de mettre à jour l’appel dans main :

Vous remarquez quelque chose d’étrange ? Nous passons « a », pas « &a ».

Même si la fonction de tri modifie le tableau, nous n’avons pas besoin de l’opérateur d’adresse ici. Cela semble contre-intuitif si vous êtes habitué aux langages de transmission par valeur. Vous vous demandez peut-être pourquoi cela fonctionne sans pointeurs explicitement dans l’appel.

C’est parce qu’en C, les tableaux se désintègrent en pointeurs lorsqu’ils sont transmis aux fonctions. La fonction reçoit une référence au début du tableau en mémoire. C’est pourquoi il peut modifier les données originales.

Comprendre cette distinction est la passerelle vers la maîtrise des pointeurs. Sans cela, les bibliothèques C ne sont que des blocs de code statiques. Avec lui, vous construisez des systèmes modulaires et portables.