This shows you the differences between two versions of the page.
|
programare:laboratoare:lab11 [2025/12/14 02:14] darius.neatu [Noţiuni teoretice] |
programare:laboratoare:lab11 [2025/12/30 15:53] (current) cosmin_stefan.popa [Noţiuni teoretice] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| ===== PCLP Laborator11: Parametrii liniei de comandă. Preprocesorul. Funcții cu număr variabil de parametri. Opțiuni de compilare ===== | ===== PCLP Laborator11: Parametrii liniei de comandă. Preprocesorul. Funcții cu număr variabil de parametri. Opțiuni de compilare ===== | ||
| + | |||
| + | **Resposabili:** | ||
| + | * [[ion_dorinel.filip@cti.pub.ro|Dorinel Filip (2016 - Prezent)]] | ||
| + | * [[neatudarius@gmail.com|Darius Neațu (2016 - Prezent)]] | ||
| + | * [[mihaela.vasile@gmail.com|Mihaela Vasile (2015)]] | ||
| ==== Obiective ==== | ==== Obiective ==== | ||
| Line 22: | Line 27: | ||
| Pentru a controla execuţia unui program, de multe ori este de dorit furnizarea datelor de lucru înaintea lansării în execuţie a programului, acesta urmând să se execute apoi fără intervenţia utilizatorului (aşa-numitul „batch mode”). Acest lucru se realizează prin intermediul parametrilor liniei de comandă. (Un exemplu cunoscut este lansarea compilatorului gcc în linia de comandă cu diverse argumente, care îi spun ce şi cum sa compileze.) | Pentru a controla execuţia unui program, de multe ori este de dorit furnizarea datelor de lucru înaintea lansării în execuţie a programului, acesta urmând să se execute apoi fără intervenţia utilizatorului (aşa-numitul „batch mode”). Acest lucru se realizează prin intermediul parametrilor liniei de comandă. (Un exemplu cunoscut este lansarea compilatorului gcc în linia de comandă cu diverse argumente, care îi spun ce şi cum sa compileze.) | ||
| - | Din punct de vedere al utilizatorului, parametrii liniei de comandă sunt simple argumente care se adaugă după numele unui program, în linia de comandă, la rularea sa. Elementele acestei liste de argumente sunt şiruri de caractere separate de spaţii. Argumentele care conţin spaţii pot fi combinate într-un singur argument prin inchiderea acestuia între ghilimele. Shell-ul este cel care se ocupă de parsarea liniei de comandă şi de crearea listei de argumente. | + | Din punctul de vedere al utilizatorului, parametrii liniei de comandă sunt simple argumente care se adaugă după numele unui program, în linia de comandă, la rularea sa. Elementele acestei liste de argumente sunt şiruri de caractere separate de spaţii. Argumentele care conţin spaţii pot fi combinate într-un singur argument prin inchiderea acestuia între ghilimele. Shell-ul este cel care se ocupă de parsarea liniei de comandă şi de crearea listei de argumente. |
| Exemplu de apelare a unui program cu argumente în linia de comandă: | Exemplu de apelare a unui program cu argumente în linia de comandă: | ||
| Line 38: | Line 43: | ||
| * myshell.c | * myshell.c | ||
| - | Din punct de vedere al programatorului, parametrii liniei de comandă sunt accesibili prin utilizarea parametrilor funcţiei main(). Astfel, când se doreşte folosirea argumentelor liniei de comandă, funcţia main() se va defini astfel: | + | Din punctul de vedere al programatorului, parametrii liniei de comandă sunt accesibili prin utilizarea parametrilor funcţiei main(). Astfel, când se doreşte folosirea argumentelor liniei de comandă, funcţia main() se va defini astfel: |
| <code c> | <code c> | ||
| int main(int argc, char *argv[]) | int main(int argc, char *argv[]) | ||
| Line 1041: | Line 1046: | ||
| === Opțiuni de compilare === | === Opțiuni de compilare === | ||
| - | === Compilatorul GCC === | + | == Compilatorul GCC == |
| În cadrul laboratorului și pentru testarea temelor de casă se va folosi compilatorul GCC. GCC este unul dintre primele pachete software dezvoltate în cadrul Proiectului GNU (''GNU's Not Unix'') de către Free Software Foundation. Deși GCC se traducea iniţial prin ''GNU C Compiler'', acesta a devenit între timp un compilator multifrontend, multi-backend, având suport pentru o serie largă de limbaje, ca C, C++, Objective-C, Ada, Java, etc, astfel că denumirea curentă a devenit ''GNU Compiler Collection''. În cadrul cursului de [[http://ocw.cs.pub.ro/programare|Programare]] ne vom referi totuşi numai la partea de C din suita de compilatoare. | În cadrul laboratorului și pentru testarea temelor de casă se va folosi compilatorul GCC. GCC este unul dintre primele pachete software dezvoltate în cadrul Proiectului GNU (''GNU's Not Unix'') de către Free Software Foundation. Deși GCC se traducea iniţial prin ''GNU C Compiler'', acesta a devenit între timp un compilator multifrontend, multi-backend, având suport pentru o serie largă de limbaje, ca C, C++, Objective-C, Ada, Java, etc, astfel că denumirea curentă a devenit ''GNU Compiler Collection''. În cadrul cursului de [[http://ocw.cs.pub.ro/programare|Programare]] ne vom referi totuşi numai la partea de C din suita de compilatoare. | ||
| Line 1049: | Line 1054: | ||
| Compilatorul GCC se apelează din linia de comandă, folosind diferite opțiuni, în funcție de rezultatul care se dorește (specificarea de căi suplimentare de căutare a bibliotecilor/fișierelor antet, link-area unor biblioteci specifice, opțiuni de optimizare, controlul stagiilor de compilare, al avertisementelor, etc.). | Compilatorul GCC se apelează din linia de comandă, folosind diferite opțiuni, în funcție de rezultatul care se dorește (specificarea de căi suplimentare de căutare a bibliotecilor/fișierelor antet, link-area unor biblioteci specifice, opțiuni de optimizare, controlul stagiilor de compilare, al avertisementelor, etc.). | ||
| - | === Utilizare GCC === | + | == Utilizare GCC == |
| <hidden> | <hidden> | ||
| Line 1090: | Line 1095: | ||
| </hidden> | </hidden> | ||
| - | == Exemplu == | + | = Exemplu = |
| <code bash>gcc -o tema1 tema1.c -lm -Wall</code> | <code bash>gcc -o tema1 tema1.c -lm -Wall</code> | ||
| Line 1097: | Line 1103: | ||
| **Atenție!!!** Dacă folosiți opțiunea **-o**, nu adăugați imediat după fișierele sursă. Acest lucru ar avea ca efect suprascrierea acestora și pierderea întregului conținut. | **Atenție!!!** Dacă folosiți opțiunea **-o**, nu adăugați imediat după fișierele sursă. Acest lucru ar avea ca efect suprascrierea acestora și pierderea întregului conținut. | ||
| - | === Utilitarul Make === | + | == Utilitarul Make == |
| <note> | <note> | ||
| Line 1133: | Line 1139: | ||
| ==== Referinţe ==== | ==== Referinţe ==== | ||
| - | * TODO | + | * https://en.cppreference.com/w/c/variadic.html |
| + | * https://en.cppreference.com/w/c/preprocessor.html | ||