[so] Depunctari

Silviu Popescu silviupopescu1990 at gmail.com
Fri Mar 1 13:31:18 EET 2013


2013/3/1 Robert Dolca <robert.dolca at gmail.com>

> Nu inteleg exact care este cerinta la urmatoarele depunctari:
>
> - funcții nepublice (interne modulului) nedefinite folosind
> identificatorul static; variabile globale nepublice (interne
> modulului) nedefinite folosind identificatorul static;
> * despre ce module se vorbeste?
>


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:

void my_public_checked_function();
static void my_static_unchecked_function()

unde prima functie verifica parametrii si apoi apeleaza a doua functie daca
totul e in ordine.
Cuvantul 'static' iti garanteaza ca main() nu va vedea decat prima functie
si nu o va putea apela decat pe aceea.



>
> - nu sunt verificate valorile de retur ale funcțiilor; recomandăm
> folosirea macro-ului DIE, prezent în scheletul de laborator;
> * trebuie sa facem verificari daca fisierul de intrare ne-a fost dat
> ca parametru sau alte verificari de genul acesta?
> * trebuie ca functia add sa returneze ceva daca nu a reusit sa aloce
> memoria?
>
>
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.



> - nu sunt întoarse coduri de eroare relevante;
> * se poate detalia putin?
>

Nu sunt sigur dar ma gandesc ca e vorba de a folosi macro-uri in loc de
intregi impreuna cu return. Ai urmatoarele variante:
1) return 23; /* cand faci o verificare si ai o eroare precum memorie
insuficienta, fisierul nu s-a putut deschide, etc. */

2) #define FILE_NOT_FOUND 23 /* intr-un header eventual ca sa stie si alte
module de eroarea asta */
    return FILE_NOT_FOUND /* intr-o functie unde poate sa apara eroarea
asta */

A doua varianta e mai lizibila si pentru cei care corecteaza si pentru tine
daca te mai uiti peste cod dupa o luna.

Sper ca a ajutat cu ceva raspunsul meu.

[1] http://linux.die.net/man/3/fclose

-- 
Silviu Popescu
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20130301/41fb4bd3/attachment.html>


More information about the so mailing list