declaraţie de returnare

Mecanismul de returnare este descris în capitolul 3. După cum vă amintiți, se spune că această afirmație are două utilizări importante. În primul rând, acesta oferă o ieșire imediată dintr-o funcție, și anume, forțat să efectueze un program pentru a transfera controlul la codul care apelată funcția. În al doilea rând, această declarație poate fi utilizată pentru a returna o valoare. Următoarele secțiuni descriu exact modul în care puteți utiliza o declarație de returnare.







Revenirea dintr-o funcție

Funcția poate înceta executarea și să efectueze o revenire la programul apelant în două moduri. Prima metodă este folosită atunci când după ultima instrucțiune din funcția întâlnește suportul de închidere creț (>). (Desigur, este doar jargon, pentru că în acest cod obiect bretele acolo!) De exemplu, pr_reverse () în următorul program afișează pur și simplu șirul în ordine inversă îmi place C și apoi revine controlul programului de asteptare.

Odată ce șirul este afișat pe ecran, funcția pr_reverse () „nu face nimic mai mult“, astfel încât ea se întoarce la care a fost numit.

Dar, în practică, nu atât de multe funcții, folosind doar astfel încât la finalizare. Cele mai multe funcții pentru a finaliza declarația este utilizată pentru a reveni - sau pentru că trebuie să returneze o valoare, sau pentru a face codul mai simplu și mai eficient funcția.

Funcția poate fi mai mulți operatori de returnare. De exemplu, funcția următorul program de find_substr () returnează poziția de pornire a unui substring în același rând sau returnează -1 dacă subșir contrar, nu a fost găsit. În această funcție, două declarații de retur este utilizat pentru a simplifica codificare.

Returnarea valori

Toate funcțiile, cu excepția celor care se referă la tipul de gol. returnează o valoare. Această valoare este indicată prin expresia în declarația de returnare. standard, S89 permite executarea unei declarații fără întoarcere exprimare în interiorul funcției, al cărui tip este diferit de gol. În acest caz, toate la fel există o întoarcere de orice valoare arbitrară. Dar această stare de fapt, să-l puneți blând, nici un bine! Prin urmare, în C99 Standard (și în C ++), cu condiția ca funcția unui tip diferit de gol. în schimb, este necesară declarația pentru a specifica valoarea de returnare. Aceasta este, în conformitate cu C99, în cazul în care pentru orice funcție specifică că returnează o valoare, atunci interiorul acestei funcții din orice declarație de returnare ar trebui să se reflecte. Cu toate acestea, în cazul în care funcția de un tip diferit de vid. se execută până la sfârșitul anului (adică, până la acoladă de închidere), acesta returnează un arbitrar (imprevizibil din punct de vedere al programului de dezvoltator!) de valoare. Deși nu există nici o eroare de sintaxă, aceasta este o omisiune gravă, și ar trebui să fie evitate astfel de situații.







Dacă funcția nu este declarată ca fiind de tip void. acesta poate fi folosit ca un operand în expresie. Prin urmare, fiecare dintre următoarele afirmații este corectă:

Regula comună este că apelul funcției nu poate fi localizată pe partea stângă a operatorului de atribuire. expresie

Este greșit. În cazul în care compilator C în orice program își găsește o expresie, atunci marcați ca fiind eronată și programul nu va compila.

Programul poate utiliza funcțiile celor trei specii. Primul tip - un calcul simplu. Aceste funcții sunt proiectate pentru a efectua operațiuni pe argumentele lor și returnează valoarea rezultată a acestor operațiuni. Funcția de calcul este o funcție de „pur“. Ca exemple pot fi menționate standardul sqrt funcția de bibliotecă () și sin (). care se calculează rădăcina pătrată și sinusul argumentului său, respectiv.

Al doilea tip include funcții care procesează informații și returnează o valoare care indică dacă procesarea cu succes a fost efectuat. Un exemplu este o funcție de bibliotecă fclose (). care închide fișierul. Dacă operația de închidere a fost finalizat cu succes, funcția returnează 0, iar în cazul unei erori returnează EOF.

Funcția din urmă, al treilea tip nu a fost în mod explicit returnează valori. De fapt, aceste funcții sunt pur procedurale și nici o valoare nu ar trebui să emită. Un exemplu este ieșire (). care se oprește executarea programului. Toate funcțiile care nu returnează o valoare, ar trebui să fie declarat ca returnarea o valoare de tip void. Declararea ca o funcție returnează o valoare de tip void. interzici utilizarea sa în expresii, prevenind astfel utilizarea accidentală a acestei funcții în alte scopuri.

Uneori, funcții, care ar părea să de fapt, nu dau rezultate semnificative, dar returnează o valoare. De exemplu, printf () returnează numărul de simboluri de ieșire. Dacă ar exista un astfel de program, care ar verificat de fapt această valoare, atunci ar fi ceva special. Cu alte cuvinte, cu toate că toate funcțiile, cu excepția celor referitoare la tipul de gol. Valorile de returnare nu trebuie să caute să utilizeze aceste valori, ceea ce ar putea veni. Deseori, atunci când se discută valorile funcției de returnare, există o întrebare destul de comună: „? Nu este necesar să se atribuie valoarea returnată la o variabilă nu este dacă va atârna undeva și dacă aceasta va conduce în viitor la probleme“ Pentru a răspunde la această întrebare, repetăm, că atribuirea nu este obligatorie, iar lipsa ei nu va cauza probleme. Dacă valoarea returnată nu este inclusă în oricare dintre operatorii de atribuire, valoarea este pur și simplu aruncate. Rețineți, de asemenea, că o respingere a valorilor este foarte frecvente. Luați în considerare următorul program, care utilizează funcția Mul ().

În linia 1, valoarea returnată de Mul (). atribuit variabilei z. În linia 2, valoarea returnată este atribuită, dar folosește funcția printf (). În cele din urmă, în linia 3, valoarea returnată este pierdut, deoarece nu este atribuită la oricare dintre variabilele și nu este utilizat ca parte a unei expresii.

returnează un pointer

Pentru funcția poate returna un pointer, acesta trebuie să fie declarat ca returnarea unui pointer la tipul corect. De exemplu, următoarea funcție returnează un pointer la prima apariție a unui caracter care este atribuit unei variabile. un șir de caractere s. Dacă acest caracter din șirul nu este prezent, acesta returnează un pointer la sfârșitul liniei de caractere ( „0“).

Aici este un mic program care utilizează funcția de potrivire ().

Acest program citește prima linie, iar apoi simbolul. Apoi, el a deținut locația simbol în bara de căutare. Dacă există un caracter din șirul p variabilă va indica aceasta, iar programul va afișa o linie care începe cu caracterul găsit. Dacă caracter din șirul nu este găsit, atunci p va indica sfârșitul caracterului ( „0“), linia, în care * p va reprezenta valoarea logică FALSE (fals). În acest caz, programul afișează un mesaj simbol nr.

o funcție void

Aici este o funcție exemplu print_vertical ().