dans Programmation

Amusons-nous avec le C

Le C est un langage que je n’ai pas pratiqué depuis bien longtemps. Il faut dire, hormis la programmation système et quelques niches, on ne le voit pas trop ailleurs. En tout cas au travail, je n’ai jamais eu à en faire. Et d’un point de vue personnel, je suis plus sur d’autres langages comme Python ou Haskell. Mais il n’empêche que j’ai stocké, au gré de mes pérégrinations, quelques liens intéressants sur ce qu’on peut faire d’amusant en poussant ce langage hors des sentiers battus.

Une classe string

Toute personne ayant fait du C le dira, la gestion des chaînes de caractères est très … sommaire. Allouer des tableaux de char soi-même, c’est sympa 5 min, mais bon, si l’on avait une vraie encapsulation, comme les classes string disponibles dans quasiment tous les langages venus après C, ça serait mieux. Ça tombe bien, Maëlan l’a fait, à base de listes chaînées pour stocker des sous-chaînes et faciliter les opérations de concaténation, etc. Le code a été posté de base sur le Site du Zéro, mais par soucis de postérité, on va le remettre ici.

Une implémentation de vector

De même que pour string, on ne dispose de base en C d’aucune abstraction pour un conteneur dynamique comme on en a en C++, Python, etc. Et bon, faire 40 malloc / free par fonction, c’est sympa 5 min. Mais c’était sans compter sur les expériences que Qnope a fait subir au préprocesseur (disponible ici) et dont nous remettrons le code ici dans un soucis de disponibilité. Notons au passage que le préprocesseur est souvent utilisé pour implémenter une pseudo-généricité en C.

Commençons par la gestion des erreurs.

Maintenant, le code qui nous intéresse vraiment (attention, détournement de préprocesseur en approche).

Qnope nous fournit plusieurs exemples pour tester son code. D’abord un vector.

Puis une pile.

Et enfin une file.

Gestion des exceptions

Je vois déjà ceux qui sautent de leur siège en hurlant à l’hérésie, qu’en C il n’y a pas d’exception. Oui, mais c’était sans compter sur une bande de fans de C99 et de longjumps. Et aussi de détournement de macros. Le résultat n’est évidemment pas aussi souple qu’un langage implémentant naturellement les exceptions tel C++, mais c’est quand même impressionnant et c’est ici que ça se passe. Je ne vais rien rapatrier parce que y’a vraiment trop de codes.

Implémenter la libC

Le langage C a une bibliothèque standard assez légère et peu fournie. Il arrive qu’on propose d’en recoder des fonctions en guise d’exercices, le plus connu étant sans doute printf et cousins. Mais un membre de l’ex-SdZ s’est dit que ce serait plus marrant de TOUT recoder. Le projet n’a jamais abouti, mais il y a quelques jolis codes qui traînent toujours là-bas. On trouve du printf, de la gestion d’erreurs, des manipulations de chaînes de caractères, du tri, bref, plein de trucs cools.

Les mots-clefs du C

Un projet que j’avais initié, du temps où le SdZ était un site que j’aimais fréquenter. Le but ? Donner une explication simple et illustrée des différents mot-clefs qui existent en C. La plupart y sont présents, dont une explication sur asm que j’avais pris beaucoup de temps à rédiger et qui me parait assez peu claire avec quelques années de recul (à moins que ce soit parce que c’est l’assembleur qui est un langage peu clair).

Un ECS en C

Un dernier mais non des moindres, une implémentation du principe d’Entities, Components, Systems en C, alors que la plupart des articles sur le sujet que j’ai vu le font en C++. J’aurai l’occasion de revenir sur l’ECS dans d’autres articles.

Voilà, fin de cette série de liens sur ce qu’on peut s’amuser à faire en C. Bon personnellement, je ne le ferai pas parce que je suis habitué au confort apporté par des langages comme C++, Python ou C#. Mais ça prouve que le C est vraiment un langage à tout faire qu’on peut tordre dans tous les sens pour faire des trucs insensés.

Laisser un commentaire