cod naspa

Acest forum este dedicat intrebarilor de programare care nu-si au locul in unul din celelalte forumuri
Post Reply
User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: cod naspa

Post by Silviu Ardelean » 16 Feb 2010, 13:57

Yep, still OK. But we get a warning because sizeof() returns size_t.



User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cod naspa

Post by Ovidiu Cucu » 16 Feb 2010, 14:03

Hmm.... hai s-o "complicam" si mai mult! :ugeek:

Code: Select all

#include <stdio.h>

int main()
{
    size_t v = 0;
    while(v < sizeof(v++))
    {
        printf("%u", v);
    }
    return 0;
}
Acuma, da-i te rog un build si-un run.
Still OK? :biggrin:

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: cod naspa

Post by Silviu Ardelean » 16 Feb 2010, 14:17

Fara a rula, iti zic sigur ca va crapa la printf(), chiar daca pasezi "%d" sau "%d". printf()-ul are limitele sale, ptr. tipuri simple (int, float, char, etc).
Pune std::cout in loc de printf() si nu mai crapa. Chiar afiseaza ok valorile lui v.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cod naspa

Post by Ovidiu Cucu » 16 Feb 2010, 14:26

Nu crapa la printf. Ruleaza, te rog! :)

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: cod naspa

Post by Silviu Ardelean » 16 Feb 2010, 14:32

Intr-adevar, nu crapa. v ramane 0 si se va intra intr-un ciclu infinit.

PS. Nu e recomandat sa faci operatii cu variabile cand acesta sunt transmise ca parametru la sizeof(). Daca pui tipul si incerci sa faci sizeof(++TIP) nu se va compila aplicatia si nu vei scrie o enormitate.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cod naspa

Post by Ovidiu Cucu » 16 Feb 2010, 14:47

Acuma, ca sa completez si sa inchei.
The operand to sizeof can be one of the following:
  • A type name. [...]
  • An expression. [...] The expression is not evaluated.
Intradevar, cum am mai spus, punand variabila in loc de tip, e ceva mai defensiv. Totusi, putin mai neclar si in plus, exista pericolull ca vreun amator de "cool-code" sa incerce sa impuste doi iepuri dintro lovitura, ca in exemplul de mai sus. Nu se stie niciodata... ;)

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: cod naspa

Post by Silviu Ardelean » 16 Feb 2010, 15:00

Partea buna e ca si in acest caz de "cool-code" lucrurile nu se schimba (valoarea variabilei).
In schimb, in exemplul meu daca clasa obiectului se schimba in C2 si la sizeof() ramane vechia clasa C1, atunci memset() ptr. cazul 2 va seta incomplet valorile de 0.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cod naspa

Post by Ovidiu Cucu » 17 Feb 2010, 21:39

Silviu Ardelean wrote:Partea buna e ca si in acest caz de "cool-code" lucrurile nu se schimba (valoarea variabilei). [...]
Eu voiam sa spun ca, in caz de "cool-code", tocmai asta-i "partea proasta". ;)

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: cod naspa

Post by Silviu Ardelean » 17 Feb 2010, 21:59

Ovidiu Cucu wrote:
Silviu Ardelean wrote:Partea buna e ca si in acest caz de "cool-code" lucrurile nu se schimba (valoarea variabilei). [...]
Eu voiam sa spun ca, in caz de "cool-code", tocmai asta-i "partea proasta". ;)
Stiu. :) Tocmai de aceea am zis "partea buna". In exemplificarea mea, nu vad nici o parte buna daca cel ce face modificarile cu clasa C2 uita sa schimbe sizeof(C1).

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cod naspa

Post by Ovidiu Cucu » 17 Feb 2010, 23:39

cristianamarie wrote:Mai sint si treburile cu structuri variabile, unde vezi chestii gen struc.cbSize = SIZEOF_STRUCT_V1; sau treburi din astea. Acolo chiar ca e bija.
Atunci chiar ca-i bija, rau de tot! :D
Silviu Ardelean wrote: Stiu. :) Tocmai de aceea am zis "partea buna". In exemplificarea mea, nu vad nici o parte buna daca cel ce face modificarile cu clasa C2 uita sa schimbe sizeof(C1).
Stiu si eu, Silviu.
Numai sa nu cada asta pe mana unui QAE care nu poate face distinctie intre rules si recommendations. ;)

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: cod naspa

Post by Silviu Ardelean » 18 Feb 2010, 00:28

Ovidiu Cucu wrote:Numai sa nu cada asta pe mana unui QAE care nu poate face distinctie intre rules si recommendations. ;)
Atunci, iarasi e bija. :tongueout:
Da', sa stii ca mi-am pus mintea si cu PMul cand stiam ca am argumente solide si am reusit sa-mi impun punctul de vedere.

Acum, daca ai de-a face cu niste reguli "stricte" dar deloc perfecte, cum ar fi cele de genul MISRA atunci mai las si de la mine. Stii vorba aceea: cel mai destept cedeaza primul. :biggrin:

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cod naspa

Post by Ovidiu Cucu » 18 Feb 2010, 00:38

Silviu Ardelean wrote: Acum, daca ai de-a face cu niste reguli "stricte" dar deloc perfecte, cum ar fi cele de genul MISRA atunci mai las si de la mine. Stii vorba aceea: cel mai destept cedeaza primul. :biggrin:
[ OT ]
Nu ma deranjeaza MISRA. Sa zicem... vreo 90%, e Ok). ;)

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: cod naspa

Post by Silviu Ardelean » 18 Feb 2010, 00:44

Ovidiu, sunt total de acord cu tine. :) Si mie mi-a creeat in linii f. mari o impresie f. buna. Chiar am invatat din aplicarea multor astfel de reguli.
Poate exemplul meu cu MISRA nu e cel mai inspirat... dar sunt convins ca m-ai inteles l-a ce m-am referit. De fapt aici vorbim despre acelasi lucru.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3776
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: cod naspa

Post by Ovidiu Cucu » 18 Feb 2010, 00:54

Pai totul a pornit de la "Use sizeof(varname) instead of sizeof(type)" cand, probabil, am uitat de "whenever possible".
De implementat regula "Always use sizeof(varname) and never sizeof(type)" e floare la ureche pentru ala de face o scula de analiza.
In schimb recomandarea "Use sizeof(varname) instead of sizeof(type), whenever possible" e un pic mai nashpa, nu-i asa?

// mai avem pana cand Terminator va deveni realitate. :biggrin:

User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: cod naspa

Post by Silviu Ardelean » 18 Feb 2010, 01:04

Repet, eu nu vad nu vad nimic naspa in varianta mea, ba dimpotriva.
Daca as lucra intr-un domeniu embeded unde trebuie sa ma supun unor legi mai stricte, atunci las si de la mine. Din fericire doar mi-a mirosit cu ce se mananca si e putin porbabil sa activez vreo data intr-un astfel de domeniu. Acum 2 ani o firma vroia sa ma atraga pe o pozitie de team leader exact pe ceva "embeded" si le-am multumit frumos. Prefer creeativitatea si complexitatea specifica aplicatiilor ptr. PC.

PS. Cred ca ar fi cazul sa incheiam discutia cu sizeof(). :D

Post Reply