Diferență între revizuiri ale paginii „PC Laborator 9”
De la WikiLabs
Jump to navigationJump to searchLinia 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
.