Funcţia main (Curs 5)


  În orice program C/C++ trebuie să existe o unică funcţie main (principală), din interiorul
căreia începe execuţia aplicaţiei.
Pentru a înţelege mai bine modul de definire al funcţiei main vom prezenta pe scurt
câteva generalităţi legate de modul de definire al unei funcţii oarecare.
În C şi C++ nu există proceduri, ci numai funcţii. În definiţia unei funcţii tipul returnat se
pune înaintea numelui funcţiei. Dacă în momentul definirii funcţiei se omite tipul returnat, nu
este greşit şi se consideră implicit tipul returnat ca fiind int. O funcţie care are ca tip returnat void
(vid) se apelează ca o procedură. Dacă o funcţie nu are parametri, după nume se pun paranteze
rotunde sau se pune cuvântul rezervat void între paranteze rotunde în momentul definirii ei.
Funcţia main poate avea ca tip returnat void sau int (care se pune înaintea cuvântului
main). Dacă tipul returnat este int, atunci în interiorul funcţiei main pot apărea instrucţiuni de
forma return val_int care au ca efect întreruperea execuţiei programului şi returnarea către
sistemul de operare a valorii întregi val_int. În această situaţie, ultima instrucţiune din funcţia
main este de obicei return 0, ceea ce înseamnă că programul s-a terminat cu succes. Dacă apare
vreo eroare pe parcursul execuţiei programului care nu poate fi tratată (memorie insuficientă,
8
imposibilitate de deschide a unui fişier etc.), programul se părăseşte în general cu o instrucţiune
de forma return val_int, unde val_int este o valoare întreagă nenulă. Astfel, semnalăm sistemului
de operare faptul că execuţia programului s-a încheiat cu insucces (cu eroare).
Funcţia main poate să nu aibă nici un parametru, sau poate avea 2 parametri. Dacă funcţia
main are doi parametri, atunci primul este de tip int şi reţine numărul de parametri în linie de
comandă cu care s-a executat programul, iar al doilea este un şir de string-uri, în care sunt
memoraţi parametrii de apel în linie de comandă. În primul string (pe poziţia 0 în vector) se
reţine numele executabilului (al aplicaţiei), după care urmează parametrii de apel în linie de
comandă.
Presupunem că avem programul C test care are următoarea funcţie main:
void main(int narg,char argv *arg[])
{
/* .... */
}
Apelăm programul test în linie de comandă cu doi parametri:
test param1 param2
În această situaţie, în funcţia main a programului test vom avea:
– narg va avea valoarea 3
– arg[0] va fi “test.exe”
– arg[1] va fi “param1”
– arg[2] va fi “param2”.
Asupra modului de definire şi descriere a funcţiilor o să revenim.
Rezumat
Înaintea funcţiei main pot apărea niciuna, una sau mai multe secţiuni de tipul:
- includeri. Pot fi incluse în general fişiere antet (cu extensia .h), dar pot apărea şi fişiere cu
extensia .c sau .cpp. Aceste fişiere conţin în general antete (definiţii) de funcţii, definiţii de
tipuri de date şi constante, macrocomenzi, dar pot apărea şi implementări de funcţii, variabile
globale etc.
- definiţii de macrocomenzi. Macrocomanda reprezintă o generalizare a conceptului de
constantă. O macrocomandă este o expresie constantă. Fiecare apel de macrocomandă este
înlocuit la compilare cu corpul macrocomenzii. O macrocomandă se descrie după #define.
- definiţii de tipuri de date. Unui tip nou de date definit de programator i se poate da un nume
folosind declaraţia care incepe cu cuvântul rezervat typedef.
- declaraţii de variabile.
- definiţii de constante globale. Constantele în C se definesc după cuvântul rezervat const. O
constantă obişnuită poate fi definită şi ca o macrocomandă.
- definiţii sau/şi descrieri de funcţii. Funcţiile programului C se declară deasupra funcţiei
main şi se implementează după funcţia main, sau se descriu în întregime deasupra funcţiei
main.
9
Funcţia main poate avea ca tip returnat tipul void sau tipul int. Funcţia main poate să nu
aibă nici argumente sau poate avea două argumente de apel, argumente care memorează
parametrii de apel în linie de comandă ai aplicaţiei.


Teme:
1. Folosind operatorul ?: (vezi subcapitolul 2.5) scrieţi o macrocomandă pentru maximul dintre
două numere.
2. Scrieţi o macromandă pentru maximul dintre trei valori.
3. Folosind prima macrocomandă scrieţi o macromandă pentru maximul dintre patru valori.
4. Ce trebuie să conţină parametrii narg şi argv pentru o aplicaţie care ar calcula media
aritmetică în linie de comandă a oricâtor valori reale ?

0 comentarii:

Trimiteți un comentariu