Programmer en langage C
16
© Éditions Eyrolles
●
compilation proprement dite, c’est-à-dire traduction en langage machine du texte en langage C fourni par le préprocesseur.
Le résultat de la compilation porte le nom de module objet.
3.3 L’édition de liens
Le module objet créé par le compilateur n’est pas directement exécutable. Il lui manque, au
moins, les différents modules objet correspondant aux fonctions prédéfinies (on dit aussi
« fonctions standard ») utilisées par votre programme (comme printf, scanf, sqrt).
C’est effectivement le rôle de l’éditeur de liens que d’aller rechercher dans la bibliothèque
standard les modules objet nécessaires. Notez que cette bibliothèque est une collection de
modules objet organisée, suivant l’implémentation concernée, en un ou plusieurs fichiers.
Le résultat de l’édition de liens est ce que l’on nomme un programme exécutable, c’est-à-dire
un ensemble autonome d’instructions en langage machine. Si ce programme exécutable est
rangé dans un fichier, il pourra ultérieurement être exécuté sans qu’il soit nécessaire de faire
appel à un quelconque composant de l’environnement de programmation en C.
3.4 Les fichiers en-tête
Nous avons vu que, grâce à la directive #include, vous pouviez demander au préprocesseur
d’introduire des instructions (en langage C) provenant de ce que l’on appelle des fichiers « entête ». De tels fichiers comportent, entre autres choses :
●
des déclarations relatives aux fonctions prédéfinies,
●
des définitions de macros prédéfinies.
Lorsqu’on écrit un programme, on ne fait pas toujours la différence entre fonction et macro, puisque celles-ci s’utilisent de la même manière. Toutefois, les fonctions et les macros sont traitées de
façon totalement différente par l’ensemble « préprocesseur + compilateur + éditeur de liens ».
En effet, les appels de macros sont remplacés (par du C) par le préprocesseur, du moins si vous
avez incorporé le fichier en-tête correspondant. Si vous ne l’avez pas fait, aucun remplacement
ne sera effectué, mais aucune erreur de compilation ne sera détectée : le compilateur croira
simplement avoir affaire à un appel de fonction ; ce n’est que l’éditeur de liens qui, ne la trouvant
pas dans la bibliothèque standard, vous fournira un message.
Les fonctions, quant à elles, sont incorporées par l’éditeur de liens. Cela reste vrai, même si
vous omettez la directive #include correspondante ; dans ce cas, simplement, le compilateur n’aura pas disposé d’informations appropriées permettant d’effectuer des contrôles
d’arguments (nombre et type) et de mettre en place d’éventuelles conversions ; aucune erreur
ne sera signalée à la compilation ni à l’édition de liens ; les conséquences n’apparaîtront que
lors de l’exécution : elles peuvent être invisibles dans le cas de fonctions comme printf ou,
au contraire, conduire à des résultats erronés dans le cas de fonctions comme sqrt.
Delannoy Livre.book Page 16 Mercredi, 6. mai 2009 4:26 16
16
© Éditions Eyrolles
●
compilation proprement dite, c’est-à-dire traduction en langage machine du texte en langage C fourni par le préprocesseur.
Le résultat de la compilation porte le nom de module objet.
3.3 L’édition de liens
Le module objet créé par le compilateur n’est pas directement exécutable. Il lui manque, au
moins, les différents modules objet correspondant aux fonctions prédéfinies (on dit aussi
« fonctions standard ») utilisées par votre programme (comme printf, scanf, sqrt).
C’est effectivement le rôle de l’éditeur de liens que d’aller rechercher dans la bibliothèque
standard les modules objet nécessaires. Notez que cette bibliothèque est une collection de
modules objet organisée, suivant l’implémentation concernée, en un ou plusieurs fichiers.
Le résultat de l’édition de liens est ce que l’on nomme un programme exécutable, c’est-à-dire
un ensemble autonome d’instructions en langage machine. Si ce programme exécutable est
rangé dans un fichier, il pourra ultérieurement être exécuté sans qu’il soit nécessaire de faire
appel à un quelconque composant de l’environnement de programmation en C.
3.4 Les fichiers en-tête
Nous avons vu que, grâce à la directive #include, vous pouviez demander au préprocesseur
d’introduire des instructions (en langage C) provenant de ce que l’on appelle des fichiers « entête ». De tels fichiers comportent, entre autres choses :
●
des déclarations relatives aux fonctions prédéfinies,
●
des définitions de macros prédéfinies.
Lorsqu’on écrit un programme, on ne fait pas toujours la différence entre fonction et macro, puisque celles-ci s’utilisent de la même manière. Toutefois, les fonctions et les macros sont traitées de
façon totalement différente par l’ensemble « préprocesseur + compilateur + éditeur de liens ».
En effet, les appels de macros sont remplacés (par du C) par le préprocesseur, du moins si vous
avez incorporé le fichier en-tête correspondant. Si vous ne l’avez pas fait, aucun remplacement
ne sera effectué, mais aucune erreur de compilation ne sera détectée : le compilateur croira
simplement avoir affaire à un appel de fonction ; ce n’est que l’éditeur de liens qui, ne la trouvant
pas dans la bibliothèque standard, vous fournira un message.
Les fonctions, quant à elles, sont incorporées par l’éditeur de liens. Cela reste vrai, même si
vous omettez la directive #include correspondante ; dans ce cas, simplement, le compilateur n’aura pas disposé d’informations appropriées permettant d’effectuer des contrôles
d’arguments (nombre et type) et de mettre en place d’éventuelles conversions ; aucune erreur
ne sera signalée à la compilation ni à l’édition de liens ; les conséquences n’apparaîtront que
lors de l’exécution : elles peuvent être invisibles dans le cas de fonctions comme printf ou,
au contraire, conduire à des résultats erronés dans le cas de fonctions comme sqrt.
Delannoy Livre.book Page 16 Mercredi, 6. mai 2009 4:26 16
