LANGAGE C

10 étudiants

Historique
Le Langage C a  été conçu en 1972 par Dennis Richie et Ken Thompson, chercheurs aux Bell Labs,
afin de d´evelopper un syst`eme d’exploitation UNIX sur un DEC PDP-11. En 1978, Brian
Kernighan et Dennis Richie publient la d´efinition classique du C dans le livre The C Programming language [6]. Le C devenant de plus en plus populaire dans les ann´ees 80, plusieurs
groupes mirent sur le march´e des compilateurs comportant des extensions particuli`eres. En
1983, l’ANSI (American National Standards Institute) d´ecida de normaliser le langage ; ce
travail s’acheva en 1989 par la d´efinition de la norme ANSI C. Celle-ci fut reprise telle quelle
par l’ISO (International Standards Organization) en 1990. C’est ce standard, ANSI C, qui est
d´ecrit dans le pr´esent document.
1.2 La compilation
Le C est un langage compil´e (par opposition aux langages interpr´et´es). Cela signifie qu’un
programme C est d´ecrit par un fichier texte, appel´e fichier source. Ce fichier n’´etant ´evidemment pas ex´ecutable par le microprocesseur, il faut le traduire en langage machine. Cette
op´eration est effectu´ee par un programme appel´e compilateur. La compilation se d´ecompose
en fait en 4 phases successives :
1. Le traitement par le pr´eprocesseur : le fichier source est analys´e par le pr´eprocesseur qui effectue des transformations purement textuelles (remplacement de chaˆınes de
caract`eres, inclusion d’autres fichiers source . . . ).
2. La compilation : la compilation proprement dite traduit le fichier g´en´er´e par le pr´eprocesseur en assembleur, c’est-`a-dire en une suite d’instructions du microprocesseur
qui utilisent des mn´emoniques rendant la lecture possible.
3. L’assemblage : cette op´eration transforme le code assembleur en un fichier binaire,
c’est-`a-dire en instructions directement compr´ehensibles par le processeur. G´en´eralement, la compilation et l’assemblage se font dans la foul´ee, sauf si l’on sp´ecifie explicitement que l’on veut le code assembleur. Le fichier produit par l’assemblage est appel´e
fichier objet.
10 Chapitre 1. Les bases de la programmation en C
4. L’´edition de liens : un programme est souvent s´epar´e en plusieurs fichiers source, pour
des raisons de clart´e mais aussi parce qu’il fait g´en´eralement appel `a des librairies de
fonctions standard d´ej`a ´ecrites. Une fois chaque code source assembl´e, il faut donc lier
entre eux les diff´erents fichiers objets. L’´edition de liens produit alors un fichier dit
ex´ecutable.
Les diff´erents types de fichiers utilis´es lors de la compilation sont distingu´es par leur suffixe.
Les fichiers source sont suffix´es par .c, les fichiers pr´etrait´es par le pr´eprocesseur par .i, les
fichiers assembleur par .s, et les fichiers objet par .o. Les fichiers objets correspondant aux
librairies pr´e-compil´ees ont pour suffixe .a.
Le compilateur C sous UNIX s’appelle cc. On utilisera de pr´ef´erence le compilateur gcc
du projet GNU. Ce compilateur est livr´e gratuitement avec sa documentation et ses sources.
Par d´efaut, gcc active toutes les ´etapes de la compilation. On le lance par la commande
gcc [options] fichier.c [-llibrairies]
Par d´efaut, le fichier ex´ecutable s’appelle a.out. Le nom de l’ex´ecutable peut ˆetre modifi´e
`a l’aide de l’option -o.
Les ´eventuelles librairies sont d´eclar´ees par la chaˆıne -llibrairie. Dans ce cas, le syst`eme
recherche le fichier liblibrairie.a dans le r´epertoire contenant les librairies pr´e-compil´ees
(g´en´eralement /usr/lib/). Par exemple, pour lier le programme avec la librairie math´ematique, on sp´ecifie -lm. Le fichier objet correspondant est libm.a. Lorsque les librairies
pr´e-compil´ees ne se trouvent pas dans le r´epertoire usuel, on sp´ecifie leur chemin d’acc`es par
l’option -L.
Les options les plus importantes du compilateur gcc sont les suivantes :
-c : supprime l’´edition de liens ; produit un fichier objet.
-E : n’active que le pr´eprocesseur (le r´esultat est envoy´e sur la sortie standard).
-g : produit des informations symboliques n´ecessaires au d´ebogueur.
-Inom-de-r´epertoire : sp´ecifie le r´epertoire dans lequel doivent ˆetre recherch´es les fichiers
en-tˆetes `a inclure (en plus du r´epertoire courant).
-Lnom-de-r´epertoire : sp´ecifie le r´epertoire dans lequel doivent ˆetre recherch´ees les librairies pr´ecompil´ees (en plus du r´epertoire usuel).
-o nom-de-fichier : sp´ecifie le nom du fichier produit. Par d´efaut, le ex´ecutable fichier
s’appelle a.out.
-O, -O1, -O2, -O3 : options d’optimisations. Sans ces options, le but du compilateur est de
minimiser le coˆut de la compilation. En rajoutant l’une de ces options, le compilateur
tente de r´eduire la taille du code ex´ecutable et le temps d’ex´ecution. Les options correspondent `a diff´erents niveaux d’optimisation : -O1 (similaire `a -O) correspond `a une
faible optimisation, -O3 `a l’optimisation maximale.
-S : n’active que le pr´eprocesseur et le compilateur ; produit un fichier assembleur.
-v : imprime la liste des commandes ex´ecut´ees par les diff´erentes ´etapes de la compilation.

  • Les composants élémentaires du C

    Un programme en langage C est constitu´e des six groupes de composants ´el´ementaires suivants : – les identificateurs, – les mots-clefs, – les constantes, – les chaˆınes de caract`eres, – les op´erateurs, – les signes de ponctuation. On peut ajouter `a ces six groupes les commentaires, qui sont enlev´es par le pr´eprocesseur.

  • Les types prédéfinis

    Le C est un langage typ´e. Cela signifie en particulier que toute variable, constante ou fonction est d’un type pr´ecis. Le type d’un objet d´efinit la fa¸con dont il est repr´esent´e en m´emoire. La m´emoire de l’ordinateur se d´ecompose en une suite continue d’octets. Chaque octet de la m´emoire est caract´eris´e par son adresse, qui est un entier. Deux octets contigus en m´emoire ont des adresses qui diff`erent d’une unit´e. Quand une variable est d´efinie, il lui est attribu´e une adresse. Cette variable correspondra `a une zone m´emoire dont la longueur (le nombre d’octets) est fix´ee par le type. La taille m´emoire correspondant aux diff´erents types d´epend des compilateurs ; toutefois, la norme ANSI sp´ecifie un certain nombre de contraintes. Les types de base en C concernent les caract`eres, les entiers et les flottants (nombres r´eels). Ils sont d´esign´es par les mots-clefs suivants : char int float double short long unsigned

Formateur

€200.00 €150.00

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *