[so] Warning-uri si alte probleme
Stefan Bucur
stefan.bucur at gmail.com
Sun Nov 25 11:30:18 EET 2007
On Nov 25, 2007 11:04 AM, Dan Badea <dan.badea at microsoft-lab.pub.ro> wrote:
> Buna ziua,
>
> Va multumesc pentru recomandari. Din fericire am o copie personala a cartii pe care mi-ati recomandat-o. Va multumesc si pentru articole, toate sunt foarte interesante.
>
> Sa trecem totusi inapoi la oile noastre care nu sunt functia strcat in sine, ci depunctarea automata care este facuta pentru teme si care duce la bad practices (si anume suprimare de warning-uri).
>
> Am atasat un exemplu care compilat cu g++ sub linux nu produce nici un warning (-Wall). De aici, sa inteleg ca strcat este deprecated numai pentru Windows? Sau mai bine sa inteleg ca strcat e deprecated doar pt compilatorul Microsoft, iar pentru cel al GNU nu?
Compilatorul de Windows isi permite sa dea warning pentru ca Microsoft
ofera alternative (non-standard), securizate, ale functiilor POSIX.
Biblioteca C de Linux nu ofera astfel de functii non-standard, si
astfel nu lanseaza niciun warning. Probabil ca la urmatoarea iteratie
de standardizare a C-ului, va introduce si GCC-ul astfel de
warning-uri. :)
>
> Acum ca sa revin la sugestiile de lectura care mi s-au facut. In primul rand este vorba despre o tema la SO (si cum bine stiti avem multe teme), iar daca as sta sa citesc cate mi s-au recomandat pentru fiecare "problema" care apare, probabil ca, desi as invata foarte multe, nu as mai termina niciodata TOATE temele. Nu este normal ca atitudinea reprezentantilor facultatii sa fie aceea in care esti mereu impins spre lectura personala. Credeti-ma ca am facut destula de acest gen si majoritatea cunostintelor pe care le-am dobandit se bazeaza pe acest mod de a invata. Insa nu este deloc normal ca studentul sa fie mereu pus sa "descopere"/invete singur. Nu venim la scoala ca sa alfam totul din alte surse. Daca considerati ca acest subiect merita atentie, si ca studentii ar trebui sa stie ca strcat nu este bine de folosit atunci ar trebui sa se vorbeasca despre asta. Dar, dimpotriva aceasta este functia care ne-a fost predata. In concluzie, va rog sa nu apelati la cunostinte pe care studentul trebuie sa dobandeasca singur atunci cand propuneti (sau corectati/depunctati) o tema.
>
Daca ar fi sa fie o problema la noi in facultate cu lectura
suplimentara, ar fi ca nu avem suficient timp pentru aceasta, nu ca ar
fi ceva de descurajat, si ca la unele cursuri recurgi la lectura
suplimentara ca sa intelegi ceva care ar fi trebuit explicat bine
direct la curs (si astfel timpul petrecut la curs poate fi considerat
pierdut - no need to talk more about that here ;) ).
Cu toate acestea, mi se pare ca temele si cursul de SO nu intra sub
nici o forma in acea categorie. Daca e nevoie de documentare, ea este
una suplimentara lucrurilor prezentate la curs, care iti imbogateste
cunostintele, incurajeaza deprinderile de autodidact (care iti vor fi
foarte necesare intr-o cariera ulterioara), si se bazeaza pe
inclinatia ta catre acest domeniu. Fluxul de informatii nu trebuie sa
vina dintr-o singura directie si un curs bun nu trebuie sa-ti prezinte
numai niste cunostinte, ci sa-ti formeze si unele deprinderi.
> Cerinta mea de a nu fi depunctat pentru acelasi warning de 4 ori si pentru un warning care apare numai pe anumite compilatoare si pe altele nu mi se pare cat se poate de bun simt.
Eu am fost depunctat cu 1 punct si pentru un singur warning. Tind sa
cred ca depunctarea este constanta, atata vreme cat ai cel putin un
warning.
>
> Revenind la strcat va asigur ca din moment ce l-am folosit cunosc foarte bine modul in care el functioneaza si dependenta acestei functii de terminatorul de sir. Evident ca atunci cand am scris aceasta parte a codului am fost atent in a nu face concatenari aiurea. Mai mult in cazul in care nu as fi fost atent as fi beneficiat de niste neplacute erori de rulare care m-ar fi impiedicat sa trec vre-un test. Prin urmare nu vad absolut nici un motiv pentru care era mai indicat sa citesc o carte si cateva articole pentru a face o operatie simpla, cand defapt cel mai simplu era sa aplic ce am invatat si sa fac asta corect.
>
Cel mai simplu era sa te uiti pe MSDN si sa rezolvi problema pe
platforma Windows (#ifdef WIN32 #define_CRT_SECURE_NO_DEPRECATE #endif
inainte de #include <string.h>, sau sa folosesti strncpy pentru Linux
si strcpy_s pentru Windows, etc, etc.).
> Din cate vad toata lumea este foarte multumita de acest sistem de depuncatre automata, dar am sa fac o sugestie in legatura cu imbunatatirea lui. Macar sa verifice daca este vorba despre acelasi warning si sa nu depuncteze de fiecare data. Practic daca tema ar fi presupus un numar mai mare de concaternari (gen 50) puteam sa nici nu ma obosesc sa o trimit.
>
> Si in final, foarte bine, daca vreti sa corectati temele automat, nici o problema, dar ca si in viata si aici exista exceptii. Aceasta in mod clar este una si mi se pare cat se poate de normal sa nu primesc nici o penalizare.
>
> Astept niste raspunsuri si legat de a doua parte a mail-uli precedent.
Desi functia de interogare a mailslot-ului nu este blocanta, functia
ReadFile apelata asupra unui HANDLE de mailslot este :D. Nu este
nevoie sa faci busy-waiting, ci pur si simplu incerci sa citesti
urmatorul mesaj, si ReadFile se va bloca pana cand pe teava va fi
disponibil unul :) Sau puteai, asa cum facusem eu intr-o faza
initiala, ca sa ma asigur ca totul merge bine (nici eu nu stiam daca
pe Windows functiile de mailslots sunt blocante - am aflat
"experimental"), sa folosesti un semafor care sa indice numarul de
mesaje disponibile; you figure out how to use it :)
Numai bine,
Stefan Bucur
More information about the so
mailing list