C

De Ensiwiki
Aller à : navigation, rechercher

Langage-c.png  Langage C 

Le langage C est sans doute l'un des langages les plus connus et les plus utilisés. C'est un langage d'assez bas niveau, qui demande une bonne maitrise pour être utilisé correctement.

Quelques points d'histoire

Cela ne sert pas à grand chose mais si vous voulez faire votre malin et passer pour un wannabe barbu religieux, sachez que le C a été créé par Dennis Ritchie (souvent appelé dmr), qui travaillait chez Bell Labs (oui oui, la compagnie de téléphones), et ce jusque dans les années 2000 quand il a pris sa retraite après avoir atteint le statut de demi-dieu dans la communauté hacker. Et c'est armé de ce nouveau langage que ken (Thompson), dmr, et leurs petits camarades de chez Bell se sont lancés dans la conception du vénérable Unix, ancêtre spirituel de Linux qui aujourd'hui vit sur les machines de l'imag. S'il faut retenir quelque chose de tout ça, en quelques mots : le C, c'est Unix, et Unix c'est la vie, donc le C, c'est la vie.

Les multiples facettes du C

Une caractéristique fondamentale du C et que vous découvrirez certainement bien vite est que c'est un langage qui divise : il n'y a guère de consensus quant à ce que doit être le C, ce qu'il doit devenir, dans le fond comme dans le style.

En particulier, du fait de sa popularité et de sa longévité, le C a évolué en de multiples dialectes, certains standardisés, d'autres non. Par exemple, le kernel Linux est codé en GNU C, le dialecte de C maintenu par le GNU et supporté principalement par GCC. Lorsque l'on parle du langage C, sans autre précision, on parle habituellement du C standard, dont la norme est publiée par l'ISO (voyez Sites web sur le langage C pour un lien vers le dernier draft publique de la norme). C'est en principe le langage que l'on apprend à l'école.

Seulement, cette norme existe en plusieurs révisions ; ses versions majeures sont communément appelées C89 (ou C90 ou C94, voir note plus bas) et C99, selon leur année de publication. Et la mauvaise nouvelle est qu'il n'y a absolument pas de commun accord quant à la version à enseigner, à implémenter (pour les développeurs de compilateurs), ou à utiliser (pour les programmeurs).

Spécifique EnsimagÀ l'Ensimag, on vous apprend un sous-ensemble de l'ANSI-C99 en Logiciel de Base.


Remarque pour utilisateur avancéC89 et C90 désignent un seul et même dialecte ; en effet, la standardisation de 1989 a été opérée par l'ANSI tandis que celle de 1990 est une édition publiée par l'ISO, les deux langages ainsi définis étant cependant équivalents. De plus, il est à noter que l'on dit couramment C89 (ou encore ANSI-C) pour en fait désigner la norme ISO de 1990 complétée par son premier amendement de 1994, ce qui correspond en fait au C94. Cet amendement introduit une vraie gestion des caractères larges (wide characters).


Apprendre le C

L'apprentissage du C n'est pas à prendre à la légère, si bien sûr vous souhaitez un jour pouvoir écrire un programme qui marche en C. En effet, c'est un langage relativement « souple », tant au niveau de la syntaxe (on peut facilement faire dans l'illisible) que de la sémantique (beaucoup de choses écrites sont valides du point de vue du langage, mais possèdent un comportement subtil ou inattendu pour l'utilisateur non averti).

Veuillez consulter la page de liens pour des pointeurs vers des ressources pédagogiques, dont le cours de B. Cassagne, un cours de C parmi tant d'autres mais qui est néanmoins bien fait et adapté à des étudiants ayant eu une expérience préalable avec la programmation (votre cas donc !).

Outils

Pour programmer en C, il vous faudra vous munir d'un éditeur de code tel qu'Emacs ou Vim, d'un compilateur, ainsi que de divers outils de débogage, afin de vous simplifier la vie. On trouve aussi du tout-en-un (les fameux IDE).

Sous Unix, généralement, on commence par apprendre à utiliser les différents outils séparément, parce que c'est facile à faire et histoire de bien voir comment tout cela fonctionne. Sur beaucoup de plateformes Unix, de nos jours, le compilateur, c'est, sans surprise, GCC, et le débogueur, Gdb. Pour automatiser le processus de compilation, on a recours à make. Étant le langage d'Unix, le C est celui qui s'intègre le mieux dans cet environnement, aussi les outils sont dans l'esprit Unix, un pour chaque tâche, et les étapes de la compilation sont séparées.

Remarque pour utilisateur avancéUne ptite remarque qui a son importance : sous Unix, on fait l'édition de liens avec le compilateur (enfin, plus précisément, le compilateur sait appeler l'éditeur de lien correctement et tout seul), sous Windows avec le linker. Souvent, quand on débarque de Windows et que l'on a un peu (ou beaucoup) touché à la programmation, on veut lier avec ld(1), ce qui n'est pas une bonne idée, sauf si on sait ce que l'on fait...