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