Prima ședință clarifică ce se întâmplă între momentul în care scriem un text într-un editor și momentul în care calculatorul execută un program. Înțelegerea celor patru etape - scriere, compilare, link-editare, execuție - explică majoritatea erorilor pe care le veți întâlni în restul semestrului.
1Obiectivele lucrării
- Instalarea și configurarea unui mediu de dezvoltare pentru C/C++
- Parcurgerea celor patru etape până la obținerea fișierului executabil
- Distingerea erorilor de compilare de erorile de link-editare
- Recunoașterea unităților sintactice: identificatori, cuvinte cheie, operatori, constante
- Scrierea, compilarea și rularea primului program
2Mediul de lucru
- IDE Code::Blocks sau Visual Studio
- C Compilator GCC / MinGW
- C++ Compilator G++
- alt. Editor text + linie de comandă
gcc program.c -o program.exe apoi ./program.exe3Etapele obținerii unui executabil
| Etapă | Ce face | Rezultat | Erori tipice |
|---|---|---|---|
| Scriere | redactarea codului într-un editor sau IDE | fișier .cpp | - |
| Preprocesare | expandează #include și #define | cod sursă extins | fișier antet negăsit |
| Compilare | traduce sursa în cod mașină | fișier .obj | sintaxă greșită, tip incompatibil, variabilă nedeclarată |
| Link-editare | leagă modulele obiect și bibliotecile | fișier .exe | funcție declarată dar nedefinită, main lipsă |
| Execuție | încarcă programul în memorie și îl rulează | - | împărțire la zero, acces nevalid la memorie |
undefined reference to ..., fără număr de linie, este o eroare de link-editare:
funcția a fost declarată, dar corpul ei nu a fost găsit nicăieri.4Elementele de bază ale limbajului
La scrierea unui program se folosesc unități sintactice care se încadrează în câteva categorii:
| Categorie | Descriere | Exemple |
|---|---|---|
| Identificatori | nume date tipurilor, variabilelor, funcțiilor | raza, _maxx, a5, A_B_C |
| Cuvinte cheie | identificatori rezervați, cu semnificație predefinită | int, while, return, class |
| Semne de punctuație | delimitează zone din cod | [ ] ( ) { } , : ; # |
| Spații albe | separatori, cresc lizibilitatea | space (32), tab (9), newline (10) |
| Operatori | precizează operațiile efectuate | + - * / % = == && |
| Constante | valori fixe, numerice sau șiruri | 23, 3.14, 'A', "text" |
Reguli pentru identificatori
| Identificator | Valid? | Motiv |
|---|---|---|
Raza | da | începe cu literă |
raza | da | diferit de Raza - limbajul este case sensitive |
_maxx | da | poate începe cu underscore |
a5 | da | cifra nu este pe prima poziție |
5a | nu | primul caracter este cifră |
A%B | nu | % nu este caracter permis |
Total, total și TOTAL sunt trei variabile complet distincte.
Este o sursă frecventă de erori „variabilă nedeclarată" la începători.5Structura programului
Structura generală a unui program este alcătuită din trei zone:
| Zonă | Conținut | Obligatorie? |
|---|---|---|
| I - directive de preprocesare | #include, #define | opțională |
| II - declarații globale | tipuri, prototipuri de funcții, variabile globale | opțională |
| III - definiții de funcții | corpul funcțiilor, obligatoriu inclusiv main() | obligatorie |
main().
Ea este unică și nu poate fi supradefinită. Spre deosebire de Pascal, în C/C++ funcțiile
nu pot fi definite una în interiorul alteia.6Primul program
#include <stdio.h> // zona I: directive de preprocesare
#define PI 3.14159 // constantă simbolică
int nr_rulari = 0; // zona II: variabilă globală
int main(void) // zona III: definiția funcției principale
{
float raza, aria; // declarații locale
printf("Introduceti raza: ");
scanf("%f", &raza);
aria = PI * raza * raza;
printf("Aria cercului = %.2f\n", aria);
return 0; // 0 = program terminat cu succes
}
#include <iostream>
using namespace std;
const double PI = 3.14159; // în C++ se preferă const în locul lui #define
int main()
{
double raza, aria;
cout << "Introduceti raza: ";
cin >> raza;
aria = PI * raza * raza;
cout << "Aria cercului = " << aria << endl;
return 0;
}
printf,
scanf) care primesc un format explicit. În C++ se folosesc fluxuri (cout,
cin), iar tipul este dedus automat de compilator - mai sigur și mai comod.7Atelier de cod
Aici puteți scrie și rula cod C direct în pagină. Programul se execută în browser, fără compilator instalat: apăsați Rulează și priviți ieșirea de mai jos. Butonul Pas cu pas execută programul instrucțiune cu instrucțiune și arată, în dreapta, ce valoare are fiecare variabilă în acel moment.
\n din primul printf și rulați din nou. Observați că cele două texte ajung pe aceeași linie - \n este singurul lucru care trece cursorul pe rândul următor.8Sarcini de lucru
- Instalați mediul de dezvoltare și creați un proiect nou de tip aplicație consolă.
- Scrieți, compilați și rulați programul care calculează aria cercului.
- Ștergeți intenționat un caracter
;și citiți mesajul de eroare - notați linia indicată. - Apelați o funcție inexistentă (de exemplu
calculeaza();) și observați că eroarea apare la link-editare, nu la compilare. - Verificați că limbajul este case sensitive: declarați
int suma;și folosițiSuma. - Testați care dintre identificatorii din tabelul de mai sus sunt acceptați de compilator.
- Scrieți același program în ambele variante, C și C++, și comparați dimensiunea executabilului rezultat.
9Aplicație de aprofundare
#define pentru PI
și formatarea %8.3f pentru aliniere. Comparați rezultatele cu cele obținute folosind
M_PI din <math.h> și explicați eventualele diferențe.