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

Pavel Hudecek edizon na seznam.cz
Úterý Duben 21 10:37:47 CEST 2020


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
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);

------------- další část ---------------
HTML příloha byla odstraněna...
URL: <http://list.hw.cz/pipermail/hw-list/attachments/20200421/4f891532/attachment.html>


Další informace o konferenci Hw-list