Banière du site

[koala01.free.fr]->Tutoriaux->Le langage C ->Introduction

Image d'imprimante   image d'enveloppe

1.1 Le C, Cé Koi?

Si l'on devait définir le C en une seule phrase, elle serait du genre de

Le C est un langage de troisième génération, compilé, de bas niveau, exclusivement séquentiel.

fleche haut

1.2 Heuu…Pouvez pas être plus précis, SVP?

Oui, de fait, j'en vois déjà quelques uns qui se frottent la tempe en fronçant les surcils… Je vais donc expliciter quelques peu tous ces termes.

Un langage de troisième génération: Cela signifie que le langage est "proche du langage humain", que les instructions sont écrites de manière à être directement compréhensibles par l'homme (du moins par toute personne qui connait un tant soi peu l'anglais).

Un langage compilé: Cela signifie que le langage fournit en définitive un fichier exécutable directement utilisable par le processeur. Ce terme est utilisé par opposition à interprété.

Un langage de bas niveau: Cela signifie que le langage est en mesure de gérer et d'accéder directement à n'importe quelle adresse mémoire accessible au processeur (et pour rappel: tous les éléments de l'ordinateur, des pièces indispensables aux périphériques, ne sont connues par le processeur que sous la forme de plages d'adresses mémoires), et est donc en mesure d'aller discuter avec n'importe quel périphérique branché sur l'ordinateur.  Cela signifie, AUSSI, que la personne qui crée une application est en mesure de demander l'allocation d'un espace mémoire quand elle le désire…Cette personne reste néanmoins responsable de la libération des adresses mémoire dont elle a demandé l'allocation.

Ce terme est utilisé par opposition aux langages de haut niveau, gerent d'eux mêmes les allocations de mémoire, facilitant d'une certaine manière la programmation, mais qui, revers de la médaille, n'autorisent pas les acces direct à la mémoire, et donc ne sont pas en mesure d'aller discuter "directement" avec les différents périphériques.

Un langage exlusiement séquentiel: Cela signifie que, à l'inverse des langages orientés objet, il n'y a pas de liaison "intime" entre les données et les fonctions et routines qui doivent les gérer.

Voilà, le C, c'est tout cela…

fleche haut

1.3 La petite histoire du C

Rassurez-vous, je n'ai pas l'intention d'écrire un livre d'histoire

Sachez seulement que le C a été créé en 1971, par un certain Dennis Ritchie (ou du moins, c'est ce que tout le mond s'accorde à dire) parce qu'il devenait indispensable de disposer d'un langage qui soit facilement portable sur les différentes architectures.

Le but final était d'être en mesure d'écrire le fameux système d'exploitation UNIX grâce à un langage qui ne soit pas l'assembleur.

En effet, l'assembleur et les jeux d'instructions des processeurs varient selon l'architecture, et surtout, ne sont pas vraiment des plus faciles du point de vues de l'évolutivité.

Il devint rapidement très populaire, si bien que tout le monde voulu créer sa propre implémentation du C, et, ce faisant, le langage perdit l'un de ses atouts majeurs: la portabilité.

C'est la raison pour laquelle, l'idée de créer un standard unique du C fut émise.  La mise au point de ce standard fut confiée à un comité de l'ANSI (American National Standards Institute), et il apparut en 1989.

La norme ANSI est encore utilisée à ce jour par la plupart des compilateurs, si bien qu'un programme écrit en ANSI C est compatible presque partout.

Depuis, plusieurs normes ANSI sont sorties, en 1995, 1999 et en 2005 pour coller au mieux à l'évolution.  Il semblerait pourtant qu'à ce jour, ce soit encore la norme de 1999 qui soit utilisée par les compilateurs récents.

fleche haut

1.4 Ses particularités

Ceux qui commencent à peine à apprivoiser le C vont sûrement se demander ce qui a rendu le C si populaire…

En effet, sa syntaxe n'est malgré tout pas *si* évidente que cela, et, quand on ne comprend pas bien ce qu'est un pointeur ou l'allocation dynamique de la mémoire, on a vite fait d'obtenir une erreur critique (parfois même pour tout le système d'exploitation).

Bien que sa synthaxe soit, effectivement, assez exotique, le fait qu'il ne fallait plus commencer à jongler avec les instructions assembleur était déjà un plus, même s'il existait déjà d'autres langages de "troisième génération".

Mais l'énorme avantage que le C a était, justement, de ne pas être interprété mais bien compilé.

De plus, le fait qu'il s'agisse d'un langage de bas niveau fait que son champs d'application est des plus étendu: on peut écrire n'importe quelle application en C, du pilote pour un périphérique au programme de gestion.  Un système d'exploitation entier (ou du moins le noyau) est d'ailleurs encore actuellement écrit exclusivement en C…

Une autre particularité est que les "instructions de base" du langage ont été séparées en différents fichiers d'entetes, ce qui permet de n'inclure les instructions concernant les math et la trigonométrie, par exemple, que quand on en a réellement besoin.

Au final, les applications sont donc très largement plus légères que celles qui contiennent, par la force des choses, l'ensemble des instructions de bases, dont certaines ne sont que très rarement employées.

Mais comme chaque médaille a son revers, il y en a aussi un à celle-ci:

Comme les fichiers d'entetes sont nombreux, il est parfois difficile de savoir quel fichier d'entete est nécessaire pour disposer d'une commande particulière.  Et bien sûr, si le fichier d'entete manque, la compilation échouera…

Pire encore, il y a un fichier d'entete pour ce que l'on appelle les "entrées/sorties standards" (STandarD Input/Output), autrement dit pour la gestion de choses aussi simples que l'écran, les disques durs et le clavier.

La gestion de ces entrées/sorties n'est PAS incluse d'office dans l'application (par chance, elle est incluse dans de nombreux autres fichiers d'entete).

Cela signifie que, si vous n'incluez pas les bons fichiers d'entete, vous pouvez meme vous retrouver avec une application… qui ne saura strictement rien faire

C'est enfin le premier langage à utiliser les pointeurs, ce qui permet, entre autres, de ne plus devoir utiliser les variables au niveau local et qui est à la base de la création de tous les langages orientés objet.

A ce titre, on pourrait le considérer à juste titre comme l'ancètre de l'ensemble des langages de programmation actuels (ou du moins des langages moins anciens que lui).

Si vous voulez en savoir plus sur à la section de bric et de broc le processus de la compilation, jetez un oeil.

image d'imprimante   image de mail   fleche haut

Evaluation donnée par les visiteurs
Cette page a été évaluée 3 fois et a obtenu une moyenne de bien expliquée
Mon appréciation sur la compréhensibilitéde cette page est:
  • incompréhensible
  • mal expliquée
  • compréhensible, sans plus
  • bien expliquée
  • très bien expliquée

fleche haut

[koala01.free.fr]->Tutoriaux->Le langage C ->Introduction

Copyright (©) 2005 (Philippe Dunski)

Ce cours est libre, vous pouvez le redistribuer et/ou le modifier selon les termes de la Licence Publique Générale GNU publiée par la Free Software Foundation (version 2 ou bien toute autre version ultérieure choisie par vous).

Ce cours est distribué car potentiellement utile, mais SANS AUCUNE GARANTIE, ni explicite ni implicite, y compris les garanties de commercialisation ou d'adaptation dans un but spécifique. Reportez-vous à la Licence Publique Générale GNU pour plus de détails.

Cependant, l'auteur apprécierait grandement que vous lui fassiez part de toute modification apportée à son contnu

Vous pouvez le contacter par mail à l'adresse koala01@free.fr

Vous pouvez trouver une adaptation française de la licence GNU/GPL à l'URL http://www.linux-france.org/article/these/gpl.html