PC Laborator 9: Diferență între versiuni
De la WikiLabs
Jump to navigationJump to search
Linia 49: | Linia 49: | ||
* <code>nume_funcție</code> reprezintă numele funcției (vezi definiția unei funcții); | * <code>nume_funcție</code> reprezintă numele funcției (vezi definiția unei funcții); | ||
* <code>lista_argumente</code> reprezintă o listă de definiții de variabile (de forma "tip_data nume_variabilă") care sunt argumentele funcției; această listă poate fi goală; | * <code>lista_argumente</code> reprezintă o listă de definiții de variabile (de forma "tip_data nume_variabilă") care sunt argumentele funcției; această listă poate fi goală; | ||
* <code>statement_...</code> 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. | * <code>statement_...</code> 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 tip <code>void</code>, atunci obligatoriu ultima instrucțiune executată din funcție trebuie să fie <code>return</code>, care setează valoarea întoarsă de funcție. | ||
=== Exemple de implementări de funcții === | === Exemple de implementări de funcții === | ||
Linia 70: | Linia 70: | ||
return 20; | return 20; | ||
} | } | ||
</syntaxhighlight> | |||
== 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: | |||
<syntaxhighlight lang="c"> | |||
#include <stdio.h> | |||
int inc(int); | |||
int main() { | |||
int n; | |||
printf("n = "); | |||
scanf("%d", &n); | |||
printf("n + 1 = %d\n", inc(n)); | |||
} | |||
</syntaxhighlight> | </syntaxhighlight> | ||
# Cuvântul cheie <code>return</code> oprește execuția funcției, indiferent dacă mai există sau nu instrucțiuni după <code>return</code>. | |||
= Exerciții = | = Exerciții = |
Versiunea de la data 2 decembrie 2015 20:15
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
.