<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">2013/3/1 Robert Dolca <span dir="ltr"><<a href="mailto:robert.dolca@gmail.com" target="_blank">robert.dolca@gmail.com</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

Nu inteleg exact care este cerinta la urmatoarele depunctari:<br>
<br>
- funcții nepublice (interne modulului) nedefinite folosind<br>
identificatorul static; variabile globale nepublice (interne<br>
modulului) nedefinite folosind identificatorul static;<br>
* despre ce module se vorbeste?<br></blockquote><div><br><br></div><div>Ideea e ca daca iti scrii programul folosing mai multe fisiere sursa, fiecare fisier sursa poate fi considerat un modul. Acum, in fiecare fisier sursa diferit de cel care contine main(), tu iti definesti niste functii pe care vrei sa le folosesti probabil in fisierul principal (cel cu main()). Insa aceste functii utile pot folosi niste functii auxiliare definite in acelasi fisier. Un exemplu simplu ar fi ca ai o functie care face o verificare a parametrilor si apoi apeleaza o functie care chiar face ce te intereseaza. Tu vrei ca cine foloseste functiile tale mereu sa apeleze varianta cu verificare si sa nu poata apela varianta fara verificari. Atunci ai avea ceva de genul:<br>
<br></div><div>void my_public_checked_function();<br></div><div>static void my_static_unchecked_function()<br><br></div><div>unde prima functie verifica parametrii si apoi apeleaza a doua functie daca totul e in ordine.<br>
</div><div>Cuvantul 'static' iti garanteaza ca main() nu va vedea decat prima functie si nu o va putea apela decat pe aceea.<br><br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
- nu sunt verificate valorile de retur ale funcțiilor; recomandăm<br>
folosirea macro-ului DIE, prezent în scheletul de laborator;<br>
* trebuie sa facem verificari daca fisierul de intrare ne-a fost dat<br>
ca parametru sau alte verificari de genul acesta?<br>
* trebuie ca functia add sa returneze ceva daca nu a reusit sa aloce memoria?<br>
<br></blockquote><div><br></div><div>Un exemplu in acest sens este functia fclose()[1]. Aceasta returneaza 0 daca totul e in regula. Tu ar trebui sa verifici cand inchizi un fisier cu fclose() ca ti-a intors 0, altfel risti ca datele sa nu fi fost scrise in fisier.<br>
<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
- nu sunt întoarse coduri de eroare relevante;<br>
* se poate detalia putin?<br></blockquote><div><br></div><div>Nu sunt sigur dar ma gandesc ca e vorba de a folosi macro-uri in loc de intregi impreuna cu return. Ai urmatoarele variante:<br></div><div>1) return 23; /* cand faci o verificare si ai o eroare precum memorie insuficienta, fisierul nu s-a putut deschide, etc. */<br>
<br></div><div>2) #define FILE_NOT_FOUND 23 /* intr-un header eventual ca sa stie si alte module de eroarea asta */<br></div><div>    return FILE_NOT_FOUND /* intr-o functie unde poate sa apara eroarea asta */<br><br></div>
<div>A doua varianta e mai lizibila si pentru cei care corecteaza si pentru tine daca te mai uiti peste cod dupa o luna.<br><br></div><div>Sper ca a ajutat cu ceva raspunsul meu.<br></div><div> </div></div>[1] <a href="http://linux.die.net/man/3/fclose">http://linux.die.net/man/3/fclose</a><br clear="all">
<br>-- <br>Silviu Popescu<br>
</div></div>