C++: de la cod sursă la executabil
Python are nevoie de Python ca să ruleze: duci agenda.py pe un calculator fără interpretor și nu se întâmplă nimic. Azi produci altceva — un executabil: un fișier care conține direct instrucțiuni de procesor și rulează de unul singur. La finalul laboratorului vei avea două produse: executabilul salut construit din primul tău cod C++ și binar, un program compilat care afișează orice număr în baza 2 — legătura perfectă cu lecția despre biți.
Ce îți trebuie
- VS Code — îl ai.
- Compilatorul g++. Verifică întâi dacă există: în terminalul VS Code,
g++ --version.- Pe macOS: dacă lipsește, terminalul îți propune singur instalarea uneltelor de dezvoltare la prima încercare — acceptă și așteaptă.
- Pe Windows: cel mai probabil lipsește. Ghidul oficial pas cu pas e pe code.visualstudio.com — navighezi la Docs → C++ → GCC on Windows (instalarea prin MSYS2, cu adăugarea la PATH). E partea cea mai anevoioasă a laboratorului; în sala de informatică o face profesorul o singură dată, pe imaginea comună.
- Extensia C/C++ în VS Code (de la Microsoft), pentru colorare și subliniat greșeli.
- Cont: niciunul. Timp: 20 minute verificare unelte + 30 primul program + restul pe convertorul binar.
Primul program: scrie, compilează, rulează
- Folder nou
cpp-lab, deschis în VS Code. Fișier nou:salut.cpp.
#include <iostream>
int main() {
std::cout << "Salut! Sunt un program compilat." << std::endl;
int varsta = 14;
std::cout << "Peste un an voi avea " << varsta + 1 << " ani." << std::endl;
return 0;
}
- Nu există buton de „play" care să facă magie de data asta — compilarea o comanzi tu, în terminal:
g++ salut.cpp -o salut
Comanda tace câteva clipe și... nu afișează nimic. La compilatoare, tăcerea e de aur: înseamnă zero erori. Uită-te în panoul de fișiere — a apărut salut (pe Windows, salut.exe).
- Rulează executabilul:
./salut
(pe Windows: .\salut sau simplu salut).
Ce s-a întâmplat de fapt, în două fraze: interpretorul (Python) citește codul sursă linie cu linie și îl execută pe loc, de fiecare dată. Compilatorul (g++) traduce tot codul, o singură dată, direct în instrucțiuni de procesor — șiruri de biți, exact reprezentarea despre care ai învățat la „Biți, ASCII și numere" — și le împachetează într-un fișier de sine stătător. De-asta executabilul tău rulează și pe un calculator care n-a auzit de C++.
- Fă experimentul care fixează ideea: șterge un
;din cod și rulează iar comandag++. Citește eroarea — compilatorul refuză să producă executabilul și îți arată linia. Apoi observă că./salutîncă merge: executabilul vechi n-a fost atins. Codul sursă și executabilul sunt două obiecte diferite; după orice modificare, recompilezi.
Convertorul în binar: un program compilat care calculează biți
Simetrie frumoasă: scrii un program care e el însuși biți, ca să afișeze biții altor numere. Fișier nou, binar.cpp:
#include <iostream>
int main() {
int numar;
std::cout << "Numar natural: ";
std::cin >> numar;
int copie = numar;
std::string rezultat = "";
while (copie > 0) {
int rest = copie % 2;
if (rest == 1) {
rezultat = "1" + rezultat;
} else {
rezultat = "0" + rezultat;
}
copie = copie / 2;
}
if (numar == 0) {
rezultat = "0";
}
std::cout << numar << " in binar: " << rezultat << std::endl;
return 0;
}
Compilează (g++ binar.cpp -o binar) și rulează. Algoritmul e cel de la lecția de binar — împărțiri repetate la 2, resturile citite de jos în sus — doar că acum resturile se lipesc în fața șirului ("1" + rezultat), deci ordinea iese corectă de la sine.
Diferențele C++ față de Python, ca să nu te împiedici în ele:
- fiecare instrucțiune se termină cu
; - blocurile stau între acolade, nu se marchează prin indentare (indentarea rămâne, dar pentru oameni);
- variabilele se declară cu tip:
int numar;— spui de la început ce fel de valoare va ține; - citirea e
std::cin >> numar, scriereastd::cout << ...— săgețile arată sensul în care curg datele.
Verifică cu valorile pe care le știi din lecție: 5 trebuie să dea 101, 8 dă 1000, 255 dă 11111111.
Dacă nu merge
g++: command not founddupă instalare (Windows): PATH-ul nu s-a actualizat în terminalul deja deschis. Închide complet VS Code și redeschide-l; terminalele moștenesc PATH-ul de la pornire.error: expected ';': clasicul punct și virgulă uitat — eroarea arată de multe ori spre linia următoare celei vinovate, pentru că abia acolo s-a lămurit compilatorul că ceva lipsește. Caută cu un rând mai sus../salut: No such file or directory: fie compilarea a eșuat (derulează în sus după erori), fie ești în alt folder decât executabilul.lsîți arată ce există unde stai.- Modifici codul, dar programul se comportă ca înainte: rulezi executabilul vechi. Recompilează. E greșeala pe care o va face toată clasa cel puțin o dată azi — de aceea profesioniștii au un singur gest pentru „compilează și rulează".
- Pe Windows, fereastra se închide instant la dublu-click pe exe: normal — programul termină și fereastra moare. Rulează-l din terminal, ca mai sus, acolo rămâne totul pe ecran.
Misiunea ta
Nivel de bază (obligatoriu): ambele programe compilate și funcționale: salut (personalizat cu datele tale) și binar verificat pe 5, 8, 100 și 0.
Extindere: îmbunătățește convertorul să afișeze și numărul de biți folosiți (lungimea șirului: rezultat.size()), plus un mesaj de tip „incape pe un octet" dacă rezultatul are cel mult 8 biți.
Provocare: programul invers — citește un șir de 0 și 1 (std::string) și afișează valoarea în baza 10. Indiciu: parcurgi șirul de la stânga la dreapta cu for și menții valoare = valoare * 2 + cifra. Testul suprem: trece un număr prin ambele programe și verifică dacă se întoarce neschimbat.
Ai terminat când:
- poți explica, cu executabilul pe ecran, diferența interpretat/compilat în maximum 3 fraze;
- convertorul dă rezultate identice cu metoda pe hârtie din lecția de binar, pe 4 numere alese de colegul de bancă;
- ai provocat, văzut și reparat cel puțin o eroare de compilare;
- folderul conține sursele
.cppși executabilele, și știi care e care.