Salut!
Nu m-am prins daca ai intrebat sau nu ceva, insa pot sa spun ca nu este
obligatoriu sa:
- folosim DIE (de exemplu in caz ca vrem sa dezalocam memoria, nu este prea
ok)
- intoarcem neaparat codul intors de apelul de sistem, in cazul unei erori

Pentru partea cu DIE, poti tu pur si simplu sa pui exit(-1) in macro (sau
sa ai un #define FAIL_CODE -1) si asa mereu vei avea un cod de return
negativ (asa cum se recomanda si in enuntul temei). Pentru a elibera si
memoria in cazul unei erori sau a returna exact codul apelului de sistem
care a generat eroarea in program, iti poti face propriul mecanism (de
exemplu o functie helper, un macro DIE modificat sau un efect de tip
waterfall in cazul unei erori).
Ca sa avem comportament diferit in functie de platforma (de exemplu sa
folosim GetLastError() pe Windows) ar trebui sa avem directive de
preprocesare de forma #ifdef _WIN32, ceea ce este interzis la aceasta tema.

Spor!
Adrian Pop

2018-03-06 16:16 GMT+02:00 Mihai Popescu via so <so@cursuri.cs.pub.ro>:

> Bună ziua,
>
> Ne este spus în laboratoare și teme să folosim macro-ul DIE pentru
> verificarea codului de eroare întors de un apel de sistem.
> Am observat că în resurse [1], [2] este implementat apelând
> exit(EXIT_FAILURE). Acest lucru face ca procesul să intoarcă de fiecare
> dată 1, nu codul de eroare întors de un apel de sistem, deoarece
> EXIT_FAILURE este definit astfel în stdlib.h :
> #define EXIT_FAILURE 1 /* Failing exit status. */
>
> Codul de eroare poate fi luat:
> - în Linux din errno, macro definit în errno.h
> - în Windows apelând GetLastError()
>
> Pe acesta ar trebui să îl returneze și procesul.
>
> [1] https://ocw.cs.pub.ro/courses/so/laboratoare/resurse/die
> [2] https://ocw.cs.pub.ro/courses/so/laboratoare/resurse/c_tips
>
> O zi bună,
> Mihai Popescu
>
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
>



-- 
Adrian Pop
Student @University Politehnica of Bucharest
_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii

Raspunde prin e-mail lui