Cap. 8. Programarea in C++ pe sisteme UNIX
Cel mai raspandit compilator in lumea UNIX este GCC, implementare free
realizata de catre Free Software Foundation. Acesta este un compilator
extensibil, existand extensii pentru C++, Objective-C, Pascal, Fortran, etc.
Executabilele generate de catre acest compilator nu trebuie neaparat sa fie
free
software, chiar daca includ librariile standard C sau C++.
Sintaxa generala de apelare a compilatorului este:
gcc [ optiuni nume_fisier ]
g++ [ optiuni nume_fisier ]
Tipul fisierelor de intrare este determinat dupa sufixul acestora, si
sunt prelucrate dupa cum urmeaza:
.c - sursa C: preprocesare, compilare, asamblare
.C - sursa C++: preprocesare, compilare, asamblare
.cc - sursa C++: preprocesare, compilare, asamblare
.cxx - sursa C++: preprocesare, compilare, asamblare
.m - sursa Objective-C: preprocesare, compilare, asamblare
.i - sursa C preprocesata: compilare, asamblare
.ii - sursa C++ preprocesata: compilare, asamblare
.s - sursa asamblare: asamblare
.S - sursa asamblare: preprocesare, asamblare
Fisierele avand alte sufixe, cum ar fi .o (fisier obiect) sau
.a (fisier arhiva), sunt trimise catre link-editor.
Pentru a se evita parte din etapele prelucrarii pot fi utilizate
urmatoarele optiuni:
-c compileaza si asambleaza fisierele sursa, dar nu le link-
editeaza
-S compileaza fisierele sursa, fara insa a le asambla
-E nu lanseaza compilarea, ci doar preprocesarea
Implicit, gcc genereaza un fisier executabil avand denumirea
"a.aout"; fisierele obiect corespunzatoare intrarii "sursa.sufix"
sunt denumite "sursa.o", iar fisierele asamblate "sursa.s".
Denumirea iesirii poate fi schimbata cu ajutorul optiunii "-o file".
Alte optiuni des utilizate:
optiuni de compilare:
-Idirector - adauga director la lista directoarelor in
care sunt cautate fisierele .h
-Ldirector - adauga director la lista directoarelor in
care sunt cautate bibliotecile
-O, -O1, -O2, -O3 - activeaza diverse nivele de optimizare a
codului. -O3 este nivelul cel mai avansat de optimizare
-O0 - dezactiveaza optimizarea codului
optiuni de link-editare:
-lbiblioteca - utilizeaza biblioteca specificata in cadrul etapei
de link-editare
optiuni de preprocesare:
-Dmacro - defineste macro-ul specificat ca fiind "1"
-Dmacro=valoare - defineste macro cu valoarea specificata
-Umacro - anuleaza macro-ul specificat
Optiuni specifice C++:
-fall-virtual - trateaza toate functiile membre ca fiind virtuale
-fthis-is-variable - permite utilizarea pointer-ului "this"
ca o variabile obisnuita
-fexternal-templates - produce cod obiect mai mic pentru
declaratiile de template-uri, generand doar o singura copie a fiecarei functii
template acolo unde aceasta este definita. Pentru a putea utiliza aceasta
optiune, trebuie marcate toate fisierele sursa care utilizeaza template-uri
cu directiva #pragma implementation (acolo unde sunt definite efectiv
template-urile) respectiv #pragma interface (acolo unde sunt declarate
template-urile). Atunci cand este utilizata aceasta optiune, toate instantierile
de template-uri sunt considerate external. De aceea, toate aceste
instantieri trebuie sa fie realizate in cadrul fisierului marcat cu
"implementation", de exemplu prin utilizarea unor declaratii "typedef"
care sa faca referire la fiecare instantiere
-falt-external-templates - are un comportament similar cu cel al
optiunii precedente, cu exceptia faptului ca este generata o singura copie a
fiecarei functii template acolo unde aceasta este definita pentru prima oara
-fhandle-exceptions - activeaza mecanismul de tratare a
exceptiilor. Programele care utilizeaza acest mecanism trebuie compilate cu
aceasta optiune, in caz contrar fiind generata o eroare la compilare
(Nota: in versiunile recente, 2.8.x, ale gcc, aceasta optiune a fost
schimbata in "-fexceptions" si este activata in mod implicit)
Exemple:
Pentru compilarea primului exemplu din capitolul 7:
gcc -o cap7_1 cap7_1.cc
Pentru compilarea exemplului din capitolul 6:
gcc -fhandle-exceptions -O3 -o cap6 cap6.cc
In capitolul urmator va fi prezentat limbajul Objective-C.
Realizat de Dragos Acostachioaie, ©1998
http://www.biosfarm.ro/~dragos