Histoire
Cori est une bibliothèque C à fichier unique conçue pour simplifier le processus d’entrée utilisateur en C. Elle fournit un ensemble complet de fonctions qui gèrent les scénarios d’entrée courants et les erreurs potentielles, permettant aux programmeurs de se concentrer davantage sur la logique de leur programme plutôt que sur les subtilités de la gestion des entrées. De plus, Cori vise à servir de remplacement plus sûr et plus convivial à la fonction scanf, qui est souvent mal utilisée par les débutants et peut facilement conduire à un comportement indéfini[1].
Problèmes que Cori résout
Simplifier la gestion des entrées utilisateur : Cori fournit un ensemble de fonctions qui gèrent différents types d’entrées utilisateur, ce qui permet aux programmeurs de collecter et de traiter plus facilement les entrées sans se soucier des complexités sous-jacentes.
Remplacer
scanf: la fonctionscanfest notoirement difficile à utiliser correctement, en particulier pour les débutants. Cori offre une alternative plus sûre et plus intuitive, réduisant le risque de comportement indéfini et rendant la gestion des entrées plus simple.
Concepts fondamentaux
Types d’entrée
Cori prend en charge une large gamme de types d’entrée, chacun représenté par un type C spécifique :
Entiers signés:
intmax,longlong,long,int,shortEntiers non signés:
uintmax,ulonglong,ulong,uint,ushortDécimaux en point flottant:
longdouble,double,floatTexte:
character,until,line,linelAutre:
boolean
Système de gestion des erreurs
Cori inclut un système de gestion des erreurs robuste qui permet aux programmeurs de définir des gestionnaires d’erreurs personnalisés. La bibliothèque définit une énumération InputError qui représente toutes les conditions d’erreur possibles, telles qu’une entrée vide, une fin de fichier (EOF), des caractères booléens non valides, plusieurs caractères, un nombre non valide, un nombre hors limites, une mémoire insuffisante et une base numérique non prise en charge.
Familles de fonctions
Pour chaque type d’entrée, Cori fournit une famille de fonctions pour gérer différents scénarios :
read_<typename>: lit l’entrée depuisstdinet gère les erreurs à l’aide d’un gestionnaire d’erreurs NO-OP (aucune opération).read_<typename>_or: lit l’entrée depuisstdinet gère les erreurs à l’aide d’un gestionnaire d’erreurs spécifié.read_<typename>_from: lit l’entrée depuis un fluxFILE *spécifié et gère les erreurs à l’aide d’un gestionnaire d’erreurs NO-OP.read_<typename>_or_from: lit l’entrée depuis un fluxFILE *spécifié et gère les erreurs à l’aide d’un gestionnaire d’erreurs NO-OP.tryRead_<typename>: lit une fois l’entrée destdinet renvoie un code d’erreur si une erreur se produit.tryRead_<typename>_from: lit une fois l’entrée d’un fluxFILE *spécifié et renvoie un code d’erreur si une erreur se produit.
Techniques and patrons utilisés
Bibliothèques STB
Cori est conçue comme une bibliothèque de style STB[2], ce qui signifie qu’elle se compose d’un seul fichier d’en-tête qui contient à la fois l’interface et l’implémentation. Cela la rend facile à manipuler, car les utilisateurs n’ont besoin d’inclure que le fichier d’en-tête dans leurs projets. Cependant, cette approche peut conduire à des fichiers d’en-tête volumineux, elle est donc mieux adaptée aux bibliothèques simples et à usage unique comme Cori.
Utilisation intensive des macros
Cori utilise abondamment les macros pour la métaprogrammation, ce qui permet de générer des modèles de code répétitifs. L’un des modèles les plus utilisés est le modèle X-macro[3], qui permet de définir un ensemble de fonctions et de structures de données liées de manière concise et maintenable. Cette approche réduit la duplication de code et rend la bibliothèque plus flexible et plus facile à étendre.
Example
Cori a été conçu dans un souci de simplicité.
#define CORI_IMPLEMENTATION
#include "stb_cori.h";
int main() {
int result;
printf("Entrez un entier : ");
result = read_int();
printf("Reçu %d\\n", result);
}Conclusion
Cori est une bibliothèque puissante et conviviale pour la gestion des entrées de console dans les programmes C. En fournissant un ensemble complet de fonctions et un système de gestion des erreurs robuste, Cori simplifie le processus de gestion des entrées et offre une alternative plus sûre à la fonction scanf. Sa conception en tant que bibliothèque de style STB et l’utilisation de techniques de macro avancées facilitent son intégration et son extension, ce qui en fait un excellent choix pour les programmeurs C débutants et expérimentés, en particulier pour les programmes simples de test.
Pour plus de détails sur l’utilisation de Cori, veuillez vous référer au fichier README.