Re: Chyba v C - velmi podivné chování

as5sgm na gmail.com as5sgm na gmail.com
Úterý Duben 21 10:49:13 CEST 2020


 >>> If ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y) > 3) {

Tento riadok kodu by nepresiel review a ani MISRA rules, vsade kde su 
aspon dvaja vyvojari :)

Miro


On 21. 4. 2020 10:37, Pavel Hudecek wrote:
>
> Vzhledem ke komutativnosti sčítání by pořadí mělo bejt irelevantní, 
> kromě toho posledního >, ale to má nižší prioritu než +, takže se musí 
> vyhodnotit jako poslední.
>
> No a že to nebude fungovat v jiných jazycích? To je snad normální. 
> Nebo všechny mají ++, printf, pointery jako Delphi, nepotřebují 
> deklarovat proměnné jako VB6, … ?
>
> Příkazů je tam 0, takže omezení na max. jeden na řádek to taky 
> nepřekračuje.
>
> PH
>
> *Od: *Michal Gregor <mailto:a2x1nptda8 na email.cz>
>
> Spravne se maji slozite podminky prevest do funkci. Plati zasada jeden
>
> radek jeden prikaz. A nespolehat se na interni "tajne" funkce
>
> compilatoru. Co kdyz to nekdo skopiruje do C++? Nebo do uplne jineho 
> jazyja.
>
> Dne 21.04.2020 v 8:46 Jan Waclawek napsal(a):
>
> > A nemohlo to byt skor o tom, ze v takychto vyrazoch
>
> >
>
> >>> If ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y) > 3) {
>
> >
>
> > nie je zarucene poradie vyhodnotenia pod-vyrazov, aj keby mali vedlajsie
>
> > efekty?
>
> >
>
> > wek
>
> >
>
> >
>
> > ----- Original Message ---------------
>
> >> Sa vam dvom do toho zamontujem, som nieco nasiel vo svojom archive, ale
>
> >> Ty si mimo podozreni :)
>
> >> Skor si ja pofajcim, ze uz kedy som daval do placu citat z normy, ktory
>
> >> si teraz dal aj Ty :-D
>
> >>
>
> >> https://list.hw.cz/pipermail/hw-list/2011-July/399004.html
>
> >>
>
> >> miro
>
> >>
>
> >> On 21.4.2020 1:17, Jan Waclawek wrote:
>
> >>> Hm, tak ja vidim vyhody skor v tych 6 ifoch a 1 pomocnej premennej...
>
> >>>
>
> >>> Ale ak by si nahodou nasiel odkaz, kde ten JW z minulosti povedal, ze
>
> >>> vysledkom podmienky nemusi byt 0 alebo 1, tak by som Ti bol vdacny.
>
> >>>
>
> >>> wek
>
> >>>
>
> >>>
>
> >>> ----- Original Message ---------------
>
> >>> Tak?e se po pár misících mu?u vrátit k tomu, ?e jedna z výhod C je 
> mo?nost
>
> >>> dilat vici, jako:
>
> >>>
>
> >>> If ((a<2)+(a>b)+(x<y)+(a%x==12)+(b<y)>  3) {
>
> >>>
>
> >>> Co? v jiných jazycích vede na 6 ifu a 1 pomocnou prominnou.
>
> >>>
>
> >>> PH
>
> >>>
>
> >>> Od: Jan Waclawek
>
> >>>
>
> >>> Hm, tak potom by som mal asi tomu JW z minulosti jednu tresnut...
>
> >>>
>
> >>> Konkretne teda, C99, 6.5.8 Relational operators #6:
>
> >>> Each of the operators< (less than),>  (greater than),<= (less than or
>
> >>> equal to), and>=
>
> >>> (greater than or equal to) shall yield 1 if the specified relation 
> is true
>
> >>> and 0 if it is false. 92)
>
> >>> The result has type int.
>
> >>>
>
> >>> Ten footnote 92) je kuzelny:
>
> >>>    The expression a<b<c is not interpreted as in ordinary 
> mathematics. As the
>
> >>> syntax indicates, it
>
> >>> means (a<b)<c; in other words, ??if a is less than b, compare 1 to c;
>
> >>> otherwise, compare 0 to c??.
>
> >>>
>
> >>> wek
>
> >>>
>
> >>>
>
> >>> ----- Original Message ---------------
>
> >>>
>
> >>> Mil jsem nijak za to, ?e to byl právi jistý JW, kdo mi tu onehdá 
> vyeetl, ?e
>
> >>> spoléhat se, ?e výsledkem podmínky je 0 nebo 1 není správné:-)
>
> >>>
>
> >>> PH
>
> >>>
>
> >>> Od: Jan Waclawek
>
> >>>
>
> >>>> A jinak teda ten kód udilá to, ?e pokud je splnina podmínka v 
> závorce, nastaví se bit 0 na výstupní (zda to bude bit 0 není 
> zarueeno, ale jinak skoro jisté).
>
> >>>
>
> >>> Preco by to nemal byt bit 0?
>
> >>>
>
> >>> _______________________________________________
>
> >>>
>
> >>>>>
>
> >>>>>     DDRB |=(1<CLK_UP);
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list na list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list
------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200421/af5e10ab/attachment.html>


Další informace o konferenci Hw-list