Unelte utilizator

Unelte site


laboratoare:laborator-01

Diferențe

Aici sunt prezentate diferențele dintre versiunile selectate și versiunea curentă a paginii.

Link către această vizualizare comparativă

Ambele părți revizuirea anterioară Versiuni anterioare
Urmatoarea versiune
Versiuni anterioare
laboratoare:laborator-01 [2017/02/18 21:35]
iulian.matesica [2.3.2. Fișiere header și include guards]
laboratoare:laborator-01 [2018/02/21 16:32] (curent)
mihai.iacov [Reguli esenţiale pentru promovarea laboratorului]
Linia 1: Linia 1:
 ====== Laborator 01: Introducere ====== ====== Laborator 01: Introducere ======
  
-===== 1. Obiectivele laboratorului =====+===== 1. Reguli pentru laborator=====
  
-* familiarizarea cu structuri de date +Mai multe detalii pot fi găsite pe pagina [[informaii-generale:notare|Reguli de notare]].
-    * liste +
-    * stive +
-    * cozi+
  
 +==== Reguli esenţiale pentru promovarea laboratorului====
  
-introducere in algoritmi și tehnici de programare +* **MAXIM** 3 absenţe la laborator (**NU*se poate reface la alte grupe) 
-    recursivitate  +**MINIM** jumătate din punctajul de laborator
-    divide et impera +
-    greedy +
-    programare dinamică +
-    backtracking +
- +
- +
-introducere în teoria grafurilor +
-    parcurgeri de grafuri/arbori +
-    arbori binari, arbori minimi de acoperire +
-    * drumuri minime in graf (Dijkstra)+
  
  
Linia 242: Linia 230:
  
 <note>La regula cu target-ul ''%%hello.o%%'' se observă folosirea opțiunii ''%%-c%%'' a utilitarului ''%%gcc%%''. Aceasta opțiune se folosește pentru a obține doar fișierul obiect din codul sursă. Se oprește procesul de compilare inainte de obținerea executabilului. La final se continua compilarea cu unirea tuturor fișierelor obiect ''%%.o%%'' într-un fișier executabil. </note> <note>La regula cu target-ul ''%%hello.o%%'' se observă folosirea opțiunii ''%%-c%%'' a utilitarului ''%%gcc%%''. Aceasta opțiune se folosește pentru a obține doar fișierul obiect din codul sursă. Se oprește procesul de compilare inainte de obținerea executabilului. La final se continua compilarea cu unirea tuturor fișierelor obiect ''%%.o%%'' într-un fișier executabil. </note>
 +
 +=== Folosirea variabilelor ===
 +Un fișier ''%%Makefile%%'' permite folosirea de variabile. Astfel, un exemplu uzual de fișier ''%%Makefile%%'' este:
 +
 +<file Makefile Makefile>
 +CC = gcc
 +CFLAGS = -Wall -g
 + 
 +all: hello
 + 
 +hello: hello.o
 +        $(CC) $^ -o $@
 + 
 +hello.o: hello.c
 +        $(CC) $(CFLAGS) -c $<
 +        
 +clean:
 +        rm -f *.o *~ hello
 +</file>
 +
 +În exemplul de mai sus au fost definite variabilele ''%%CC%%'' și ''%%CFLAGS%%''. Variabia ''%%CC%%'' reprezintă compilatorul folosit, iar variabila ''%%CFLAGS%%'' reprezintă opțiunile de compilare utilizate; în cazul de față sunt afișarea tuturor warning-urilor (**-Wall**) cu suport de depanare (**-g**).
 +
 +Variabilele predefinte sunt:
 + * **$@** se expandează la numele target-ului
 + * **$^** se expandează la lista de cerințe (prerequisites - lista de dependențe)
 + * **$<** se expandează la prima cerință (la prima dependență)
 +
 +
 +===== 4. GDB =====
 +
 +GDB (GNU Debugger) este unealta standard pentru debugging (depanare) din GNU. Este portabil şi poate fi folosit, printre altele, pentru a detecta instrucţiunea ce determina blocarea unui program la rulare (precum şi semnalul asociat erorii).
 +
 +Exemplu de lansare:\\
 +<code>
 +gcc -Wall -g my_file.c -o my_file.exe
 +gdb my_file.exe
 +</code>
 +
 +**Câteva comenzi utile în timpul depanării:**\\
 +• **list** - arată conţinutul unui fişier (câteva rânduri, în jurul unui punct numit) \\
 +• **run** - porneşte executia\\
 +• **n** (sau **next**) - trece la instrucţiunea următoare (fără a intra în apeluri de funcţii)\\
 +• **s** (sau **step**) - intră în apel de funcţie pentru a inspecta execuţia\\
 +• **b** (sau **break** sau **breakpoint**) - setează un breakpoint ce va forţa oprirea execuţiei în punctul respectiv\\
 +• **continue** - continuă execuţia până la următorul breakpoint\\
 +• **fin** (sau **finish**) - iese din funcţia curentă\\
 +
 +<note important>**list** şi **breakpoint** au nevoie de un parametru care să indice o instrucţiune ("punctul" dorit).</note>
 +
 +Exemple de identificare a instrucţiunilor (la fel pentru list) - funcţie, rândul din fişier, adresa din memorie (eventual cu explicitarea fişierului):\\
 +<code>
 +breakpoint my_function
 +breakpoint 13
 +breakpoint *0x401377
 +
 +breakpoint my_file:10
 +breakpoint my_file:my_function
 +</code>
 +
  
 ---- ----
-===== 3Ceva chestii cu surse si headere =====+===== 5Exerciții ===== 
 + 
 +==== Exercițiul 1 - Hello world  ==== 
 +Realizați un program un C/C++ care afișează mesajul //Hello, World// la ieșirea standard. 
 + 
 +==== Exercițiul 2 - Makefile  ==== 
 +Realizați un fișier Makefile pentru programul de la exercițiul 1 astfel încat: 
 + 
 + * la rularea comenzii ''%%make build%%'' să se obțină executabilul ''%%hello%%'' 
 + * la rularea comenzii ''%%make clean%%'' să se șteargă fișierul ''%%hello%%'' de pe disc. 
 + 
 + 
 +==== Exercițiul 3 - Makefile cu surse multiple  ==== 
 + 
  
 ---- ----
-===== 4Exerciții =====+===== 6Referinț===== 
 +  - [[https://ocw.cs.pub.ro/courses/so/laboratoare/laborator-01|More about GCC, Linux, Makefiles]]
  
-==== Exercițiul 1 - Hello world (2p) ==== 
-==== Exercițiul 2 - Makefile (3p) ==== 
-==== Exercițiul 3 - Makefile cu surse multiple (3p) ==== 
-==== Exercițiul 4 - ?? ==== 
  
laboratoare/laborator-01.1487446516.txt.gz · Ultima modificare: 2017/02/18 21:35 de către iulian.matesica