Llenguatge de programació C (XI). Preconacumulador i biblioteca
1992/01/01 Alegria Loinaz, Iñaki | Maritxalar, Montse Iturria: Elhuyar aldizkaria
L'objectiu d'aquest capítol és explicar com podem utilitzar les ajudes que ens ofereixen tant els compiladors com els ligandos (anomenats linkers) quan el programem en llenguatge C.
El procés de compilació es produeix en dues fases: la primera (denominada precontificación) mentre es tracten les sentències dirigides al preconbator o les falses ordres, la segona és el procés de traducció que duen a terme tots els compiladors, obtenint el programa d'objectes.
El lligant enllaça un o diversos mòduls d'objectes (tink), resolent les referències creuades entre ells i obtenint el programa executable. Els mòduls que s'associen poden ser d'usuari i/o estàndard, sent les característiques d'aquests últims les següents: Es troben a la Biblioteca C, ofereixen moltes possibilitats i és un dels apartats principals de la capacitat de C.
Per a il·lustrar els elements presentats, dividirem aquest capítol en tres apartats: el preconacumulador, la biblioteca estàndard i les biblioteques d'usuari.
Preconacumulador
Les principals possibilitats que ofereix el preconacumulador són tres:
- Definició de constants parametritzades i macros mitjançant ordre #defineix.
- Inclusió en el programa d'un o més mòduls font mitjançant #include sasiord.
- Implant de fragments de compilació condicional mitjançant #ifdef i #endif falses
#defineix falsa ordre
Mitjançant aquesta falsa ordre es realitza la definició de constants i macros tal com es va veure en el capítol sisè. Per tant, a un nom se li assigna un valor o seqüència d'ordres, per la qual cosa en trobar el nom, el compilador substitueix i compilar el valor o seqüència d'ordres que li correspon. En el Programa 1 es pot veure un exemple:
El significat de la definició dura fins al final del mòdul si no s'utilitza la falsa ordre #undef. Aquesta nova matança resulta interessant per a donar un nou significat a la definició, ja que alguns compiladors l'exigeixen abans de la redefinició.
#inclòs falsa ordre
Mitjançant aquesta ordre es pot introduir un programa font dins d'un altre, ampliant el concepte de biblioteca al nivell font.
La manera d'escriure la falsa ordre és la següent:
#include <nomeni fitxer> o #include "nomeni fitxer"
El nom de fitxer defineix el nom que té el fitxer al qual es vol accedir i es recomana que sigui del tipus .h, ja que així es diferencien els fitxers denominats títol (header). La diferència entre < i > o " resideix en la ubicació del fitxer. Si C és un fitxer de títol estàndard, es posarà entre < i > perquè el compilador el busqui en el catàleg que coneix. La presència d'indica " que es tracta d'un fitxer de títol d'usuari que buscarà el sistema en el catàleg indicat per l'autor.
Els fitxers de títol s'utilitzen conjuntament amb les biblioteques i la compilació distribuïda. Si algunes funcions es compilen en un mòdul distribuït, el ligante s'encarregarà de la relació entre mòduls, però atès que els paràmetres utilitzats en el mòdul distribuït, els tipus de dades, la definició de variables globals i el tipus de funcions són necessaris en altres mòduls, el més còmode és incloure en un fitxer de títol les definicions esmentades. Aquest fitxer s'inclourà en els programes utilitzats per les funcions del mòdul distribuït mitjançant una inclusió. En el programa 2 es pot veure un exemple de:
#ifdef, #endif falsos manaments
Mitjançant aquestes falses ordres és possible realitzar una compilació condicionada. Mitjançant aquesta opció de compilació una seqüència d'ordres s'inclourà dins del programa si la definició està vigent o el compilador no el té en compte si no ho està. Per a controlar la definició, a més de les ordres #defineix i #undef, es pot utilitzar l'opció -D del comando de compilació (cc o msc).
Aquesta opció condicional resulta interessant quan s'està desenvolupant un programa per a diferents màquines i es requereix un tractament específic conjunt de la màquina.
Per exemple, si un programa necessita manejar directament el registre de la impressora, es pot fer l'indicat en el programa 3 per a tenir en compte direccions de diferents màquines.
Biblioteca estàndard
Tal com es va explicar en el Capítol 6, les funcions han de ser definides abans del seu ús, però hi ha un conjunt de funcions predefinides, un conjunt de funcions estàndard o, cosa que és el mateix, una funció de biblioteca estàndard. Hem estudiat uns com printf i scanf, però uns altres no.
En la taula 1 es mostra una relació de les funcions més importants, excepte les d'entrada/sortida que es mostraran en el següent capítol. Al costat de les funcions, s'especifica el nom del fitxer de títol corresponent, ja que per a l'ús de les funcions estàndard s'ha d'especificar el títol corresponent amb una #include.
El programa 4 inclou un mòdul que utilitza memòria dinàmica i els programes de compilació i enllaç corresponents a l'esquema 1.
Biblioteques d'usuari
Tal com indica la programació estructurada i l'enginyeria del programari, quan els programes són llargs, han de dividir-se en funcions, formant conjunts funcionals, compilant i provant cadascun d'ells per separat. Els mòduls així creats es poden catalogar en una biblioteca perquè el lligant els utilitzi amb els programes que es referencien. Per a això cal tenir en compte les característiques de les variables analitzades en el capítol 9.
En aquesta ruta és molt convenient realitzar un fitxer de títol per mòdul d'objecte o biblioteca en el qual es defineixin les constants i tipus de dades, així com les funcions. En l'esquema 2 es mostra l'esquema d'enllaç de compilació corresponent al programa 2 vist.
En aquest segon esquema el lògic és un mòdul a part, però no s'ha catalogat en una biblioteca. Per a això s'utilitzarà el programa ar (amb UNIX) i es canviarà el comando d'enllaç. El conjunt de comandos que quedaria seria:
Gai honi buruzko eduki gehiago
Elhuyarrek garatutako teknologia