PC Laborator 9
De la WikiLabs
Obiective
În urma acestui laborator, studentul va fi capabil:
- să înțeleagă conceptul de funcție;
- să definească funcții, sub formă de prototip și implementare;
- să apeleze funcții;
- să utilizeze corect cuvintele cheie
void
șireturn
.
Funcții
Funcțiile sunt secțiuni ale unui program care se pot apela de mai multe ori, care pot modifica starea programului (prin modificarea variabilelor sau operații de IO - citire și scriere de date) și care pot întoarce un rezultat.
Definirea/ Declararea unei funcții
O funcție în C este definită în următorul fel:
tip_returnat nume_functie (lista_tip_argumente);
unde:
tip_returnat
definește tipul de date din care face parte valoarea returnată de funcție; dacă funcția nu întoarce nici o valoare (este folosit exclusiv pentru modificarea stării programului sau pentru IO), atunci se mai numește și procedură, iar tipul returnat estevoid
;nume_functie
reprezintă numele funcției care este folosit ulterior pentru apelul ei, și care respectă aceleași reguli ca orice identificator generic din C: poate conține exclusiv cifre, litere mici și mari, caracterul underscore (_), și nu poate începe cu cifră;lista_tip_argumente
reprezintă o listă de tipuri de date, separate prin virgulă, din care fac parte argumentele funcției; această listă poate fi goală (dacă funcția nu are argumente).
O declarație de funcție se numește și prototip.
Exemple de definiții de funcții
float max (float, float);
int inc (int);
void print (char[]);
int getAge ();
Implementarea unei funcții
Implementarea unei funcții în C se face în felul următor:
tip_returnat nume_functie (lista_argumente) { statement_1 statement_2 ... statement_n }
unde:
tip_returnat
reprezintă tipul returnat al funcției (vezi definiția unei funcții);nume_funcție
reprezintă numele funcției (vezi definiția unei funcții);lista_argumente
reprezintă o listă de definiții de variabile (de forma "tip_data nume_variabilă") care sunt argumentele funcției; această listă poate fi goală;statement_...
reprezintă una sau mai multe instructiuni (statement) C care implementează comportamentul funcției și care se execută de fiecare dată când se apelează funcția; corpul unei funcții poate fi gol (poate să nu conțină nici un statement), dar atunci apelul ei nu are nici un efect; dacă funcția nu este de tipvoid
, atunci obligatoriu ultima instrucțiune executată din funcție trebuie să fiereturn
, care setează valoarea întoarsă de funcție.
Exemple de implementări de funcții
float max (float a, float b) {
if (a >= b) return a;
return b;
}
int inc (int value) {
return value + 1;
}
void print (char[] string) {
printf("%s", string);
}
int getAge() {
return 20;
}
Observații
- O funcție nu este accesibilă/ apelabilă până nu este definită în program.
- Nu pot exista mai multe funcții cu același nume.
- O funcție poate avea cel mult o definiție și o implementare, dar definiția trebuie să fie plasată înaintea implementării.
- O funcție definită și ne-implementată poate fi apelată, și fișierul va compila cu succes, dar linker-ul nu va reuși să creeze fișierul executabil.
- Implementarea unei funcții ține loc implicit și de definiție, dacă aceasta nu există deja. Ca exemplu, încercați scrierea, compilarea și execuția acestui program:
#include <stdio.h> int inc(int); int main() { int n; printf("n = "); scanf("%d", &n); printf("n + 1 = %d\n", inc(n)); }
- Cuvântul cheie
return
oprește execuția funcției, indiferent dacă mai există sau nu instrucțiuni dupăreturn
.