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

Jan Waclawek konfera na efton.sk
Úterý Duben 21 01:17:07 CEST 2020


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 mìsících mùžu vrátit k tomu, že jedna z výhod C je možnost
dìlat vìci, jako:

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

Což v jiných jazycích vede na 6 ifù a 1 pomocnou promìnnou.

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