Langage de programmation C (XI). Préaccumulateur et bibliothèque

Le but de ce chapitre est d'expliquer comment nous pouvons utiliser les aides que nous offrent les compilateurs et les ligands (appelés linkers) lorsque nous le programmons en langage C.

Le processus de compilation se produit en deux phases : la première (appelée précontification) lors du traitement des sentences adressées au préconteur ou des fausses commandes, la seconde est le processus de traduction effectué par tous les compilateurs, obtenant le programme objet.

Le lien relie un ou plusieurs modules d'objets (tink), en résolvant les références croisées entre eux et en obtenant le programme exécutable. Les modules associés peuvent être utilisateur et/ou standard, les caractéristiques de ces derniers étant les suivantes: Ils sont situés dans la bibliothèque C, offrent de nombreuses possibilités et est l'un des principaux points de la capacité de C.

Pour illustrer les éléments présentés, nous allons diviser ce chapitre en trois sections : le préaccumulateur, la bibliothèque standard et les bibliothèques utilisateur.

Préaccumulateur

Les principales possibilités offertes par le préaccumulateur sont trois:

  • Définition des constantes paramétrées et macros par commande #define.
  • Inclusion dans le programme d'un ou plusieurs modules source via #include sasiord.
  • Implant de fragments de compilation conditionnelle via #ifdef et #endif faux

#défini faux ordre

Par ce faux ordre, on réalise la définition des constantes et macros comme on l'a vu dans le sixième chapitre. Par conséquent, un nom est attribué une valeur ou une séquence de commandes, de sorte que lorsque vous trouvez le nom, le compilateur remplace et compiler la valeur ou la séquence de commandes qui lui correspond. Dans le Programme 1, vous pouvez voir un exemple:

Programme 1. Exemple utilisé #define.

La signification de la définition dure jusqu'à la fin du module si le faux ordre #undef n'est pas utilisé. Ce nouveau massacre est intéressant pour donner un nouveau sens à la définition, puisque certains compilateurs l'exigent avant la redéfinition.

#inclus faux ordre

Cette commande permet d'introduire un programme source dans un autre, en élargissant le concept de bibliothèque au niveau source.

La façon d'écrire la fausse commande est la suivante:

#include <fitxategi izena> <nombre
fitxategi izena nom fichier ou #include "nom fichier"

Le nom de fichier définit le nom du fichier auquel on veut accéder et il est recommandé qu'il soit du type .h, car les fichiers appelés titre (header) diffèrent ainsi. La différence entre eux et " réside dans l'emplacement du fichier. Si C est un fichier de titre standard, il sera placé entre eux et pour que le compilateur le recherche dans le catalogue qu'il connaît. La présence de " indique qu'il s'agit d'un fichier de titre utilisateur qui recherchera le système dans le catalogue indiqué par l'auteur.

Les fichiers de titre sont utilisés conjointement avec les bibliothèques et la compilation distribuée. Si certaines fonctions sont compilées dans un module distribué, le liant se chargera de la relation entre les modules, mais puisque les paramètres utilisés dans le module distribué, les types de données, la définition des variables globales et le type de fonctions sont nécessaires dans d'autres modules, il est plus confortable d'inclure dans un fichier de titre les définitions mentionnées. Ce fichier sera inclus dans les programmes utilisés par les fonctions du module distribué par une inclusion. Dans le programme 2, vous pouvez voir un exemple de:

Programme 2. Comment utiliser le #include faux ordre.

#ifdef, #endif faux commandements

Par ces faux ordres, il est possible de réaliser une compilation conditionnée. Avec cette option de compilation, une séquence de commandes sera incluse dans le programme si la définition est en vigueur ou si le compilateur ne l'a pas pris en compte. Pour contrôler la définition, en plus des commandes #define et #undef, vous pouvez utiliser l'option -D de la commande de compilation (cc ou msc).

Cette option conditionnelle est intéressante lors du développement d'un programme pour différentes machines et nécessite un traitement spécifique de la machine.

Programme 3. Exemple de compilation conditionnelle.

Par exemple, si un programme doit gérer directement l'enregistrement de l'imprimante, vous pouvez faire ce qui est indiqué dans le programme 3 pour tenir compte des adresses de différentes machines.

Bibliothèque standard

Comme expliqué au chapitre 6, les fonctions doivent être définies avant leur utilisation, mais il y a un ensemble de fonctions prédéfinies, un ensemble de fonctions standard ou, ce qui est le même, une fonction de bibliothèque standard. Nous avons étudié les uns comme printf et scanf, mais d'autres pas.

Le tableau 1 affiche un rapport des fonctions les plus importantes, à l'exception des fonctions d'entrée/sortie qui seront affichées dans le chapitre suivant. À côté des fonctions, le nom du fichier de titre correspondant est spécifié, car pour l'utilisation des fonctions standard, vous devez spécifier le titre correspondant avec #include.

Le programme 4 comprend un module qui utilise la mémoire dynamique et les programmes de compilation et de lien correspondant au schéma 1.

Bibliothèques utilisateur

Comme l'indique la programmation structurée et l'ingénierie du logiciel, quand les programmes sont longs, ils doivent être divisés en fonctions, formant des ensembles fonctionnels, compilant et testant chacun d'eux séparément. Les modules ainsi créés peuvent être catalogués dans une bibliothèque pour que le liant les emploie avec les programmes référencés. Pour cela, il faut tenir compte des caractéristiques des variables analysées au chapitre 9.

Programme 4, Utilisation de la mémoire dynamique.

Sur ce chemin, il est très pratique de réaliser un fichier de titre par module d'objet ou bibliothèque dans lequel sont définies les constantes et types de données ainsi que les fonctions. Le schéma 2 affiche le schéma de liaison de compilation correspondant au programme 2 vu.

Dans ce second schéma, le logique est un module séparé, mais il n'a pas été répertorié dans une bibliothèque. Pour ce faire, le programme ar (avec UNIX) sera utilisé et la commande de lien sera modifiée. L'ensemble des commandes resterait:

Tableau . Fonctions standard importantes.
Schéma 1. Utilisation de la bibliothèque standard.
Schéma 2. Compilation distribuée.
Babesleak
Eusko Jaurlaritzako Industria, Merkataritza eta Turismo Saila