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

Jan Waclawek konfera na efton.sk
Úterý Duben 21 08:46:08 CEST 2020


Hm hm... 

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ší informace o konferenci Hw-list