This shows you the differences between two versions of the page.
cpl:labs:05 [2016/10/31 10:13] diana.vasile [Introducere în API-ul de C++] |
cpl:labs:05 [2017/11/01 06:59] (current) bogdan.nitulescu [Exerciții de laborator (10p)] |
||
---|---|---|---|
Line 158: | Line 158: | ||
În general, expresiile constante sunt folosite pentru valori care vor fi constante în executabilul final, dar nu pot fi calculate încă (de exemplu pentru că se bazează pe adresa unei variabile globale, care este stabilită mult mai târziu în cadrul procesului de compilare). | În general, expresiile constante sunt folosite pentru valori care vor fi constante în executabilul final, dar nu pot fi calculate încă (de exemplu pentru că se bazează pe adresa unei variabile globale, care este stabilită mult mai târziu în cadrul procesului de compilare). | ||
- | De regulă subclasele lui ''Value'' pun la dispoziție una sau mai multe metode statice ''Create'' care se pot folosi pentru a obține obiecte de acel tip. Există însă și excepții, pentru care va trebui să folosiți direct constructorul. | + | De regulă subclasele lui ''Value'' pun la dispoziție una sau mai multe metode statice ''Create'' care se pot folosi pentru a obține obiecte de acel tip. Există însă și excepții, pentru care trebuie folosit direct constructorul. Pentru un API uniform e recomandat să folosiți clasa [[http://llvm.org/doxygen/classllvm_1_1IRBuilder.html | IRBuilder]]. |
Ierarhia de valori ușurează lucrul cu orice combinații de instrucțiuni sau constante. De exemplu, o instrucțiune de adunare poate folosi ca operanzi fie un argument al funcției și o constantă, fie o constantă și rezultatul unei instrucțiuni anterioare, fie rezultatele a două instrucțiuni anterioare, și așa mai departe. Pentru a folosi rezultatul unei instrucțiuni ca operand, pur și simplu folosiți instanța acelei instrucțiuni: | Ierarhia de valori ușurează lucrul cu orice combinații de instrucțiuni sau constante. De exemplu, o instrucțiune de adunare poate folosi ca operanzi fie un argument al funcției și o constantă, fie o constantă și rezultatul unei instrucțiuni anterioare, fie rezultatele a două instrucțiuni anterioare, și așa mai departe. Pentru a folosi rezultatul unei instrucțiuni ca operand, pur și simplu folosiți instanța acelei instrucțiuni: | ||
Line 220: | Line 220: | ||
=== Exercițiul 6 - apel printf (2p) === | === Exercițiul 6 - apel printf (2p) === | ||
- | Apelul funcției printf va primi 4 argumente: formatul + cele 3 valori care trebuie printate (2 constante și rezultatului apelului functiei ''sum''). Pentru a transmite ca parametru formatul, va trebui să îi calculați adresa folosind o constantă de tip GetElementPointer. | + | Apelul funcției printf va primi 4 argumente: formatul + cele 3 valori care trebuie printate (2 constante și rezultatului apelului functiei ''sum''). Pentru a transmite ca parametru formatul, veti folosi referinta intoarsa de llvm::IRBuilder::CreateGlobalStringPtr, din exercitiul anterior. |
===== BONUS ===== | ===== BONUS ===== | ||
=== contains === | === contains === |