ft_printf

Language

Skills

  • Programming in C

  • Creating and using static libraries

  • Creating variadic functions in C (using <stdarg.h>)

  • Makefile scripting

  • Dynamic memory management (malloc, free)

  • Reading and understanding technical documentation (RTFM)

  • Documentation-driven development

  • Structures manipulation

  • Pointers manipulation & pointers arithmetics

  • Error handling

Project Overview

Le projet ft_printf est une implémentation personnelle de la fonction printf en C, conçue pour offrir une performance équivalentes à celles de la fonction standard de la libc, et soumise aux spécifications de la fonction originale. En développant cette bibliothèque, j'ai intégré des concepts avancés tels que la gestion des arguments variadiques avec <stdarg.h>, la prise en charge de conversions multiples et la gestion précise des spécificateurs de format.

Content

  • Programmes de test : Fichiers de test pour vérifier le bon fonctionnement de ft_printf.
  • ft_printf.h : Fichier d'en-tête définissant les prototypes des fonctions pour ft_printf.
  • ft_printf.c : Implémentation principale de la fonction ft_printf.
  • libft fonctions : Bibliothèque statique autorisée pour ce projet, contenant des fonctions utilitaires en C telles que celles définies dans libft.
  • Makefile : Script de compilation avec les règles all, clean, fclean, re pour compiler et gérer le projet ft_printf.

Features

  • Conversion Management: Les conversions déterminent comment les arguments fournis sont formatés et affichés. Les conversions prises en charge dans ft_printf incluent : c, s, p, d, i, u, x, X, %.

    • c : Convertit un caractère et l'affiche.
    • s : Convertit une chaîne de caractères et l'affiche.
    • p : Affiche l'adresse mémoire d'un pointeur.
    • d, i : Convertit un entier signé en décimal et l'affiche.
    • u : Convertit un entier non signé en décimal et l'affiche.
    • x, X : Convertit un entier en hexadécimal, 'x' pour minuscules ('abcdef') et 'X' pour majuscules ('ABCDEF').
    • % : Affiche un caractère '%' littéral.
  • Minimum Field Width Management: Permet de spécifier la largeur minimale de sortie. Si le résultat de la conversion est plus court que la largeur spécifiée, il est complété par des espaces (ou des zéros si le flag '0' est actif).

  • Compatible with printf libc Specifications: t_printf est conçu pour fonctionner selon les mêmes spécifications que la fonction printf de libc, assurant ainsi la compatibilité avec les applications existantes.

  • Flag Management: Les flags modifient le comportement par défaut des conversions. ft_printf prend en charge les flags suivants :

    • - : Aligne le texte à gauche dans le champ spécifié.
    • 0 : Remplit les champs numériques de zéros au lieu d'espaces.
    • . : Permet de spécifier la précision pour la conversion, contrôlant le nombre de caractères imprimés.

Usage

Créer la lib libftprintf.a :

  1. Compilation : Dans le dossier project, exécuter la commande :
make
  1. Créer un fichier zip :
make zip

Autres instructions possibles : make clean fclean re cleanz (nettoyer fichier zip)

Utiliser la bibliothèque statique pour une compilation:

  1. Inclure le fichier d'en-tête :

    Assurez-vous que le fichier d'en-tête ft_printf.h est inclus dans votre fichier source où vous souhaitez utiliser ft_printf.

    #include "ft_printf.h"
  2. Compiler ses fichiers avec la bibliothèque statique :

Utiliser la bibliothèque statique libftprintf.a plutôt que de recompiler votre programme avec les fichier .c dont elle est issue permet d'optimiser le temps de chargement et d'éxécution du programme :

  • en effet, une bibliothèque statique contient déjà les .o de ces fichiers.
  • Utiliser gcc pour compiler votre programme en liant libftprintf.a.
  • Assurez-vous d'inclure les flags -Wall -Wextra -Werror pour des avertissements et erreurs de compilation stricts
gcc -o result testfile.c libftprintf.a -I. -Wall -Wextra -Werror
  1. Exécuter le programme :
./result

Assurez-vous que libftprintf.a et ft_printf.h sont présents dans le même répertoire que votre fichier source (testfile.c dans cet exemple), ou spécifiez le chemin d'accès approprié pour libftprintf.a lors de la compilation.