<stdbool.h>/C23 bool/true/false; was: goto considered harmful; was: ceckovy kviz 2 (hardcore)

Jan Waclawek konfera na efton.sk
Pátek Září 8 13:29:27 CEST 2023


Implicitna asi nie, ale explicitna urcite ano:

#define TRUE 0x10000000;
uint32_t a = TRUE;
_Bool b = (uint8_t)a;

Ano, pouzitie explicitnej konverzie je uz vyjadrenie zameru programatora,
takze uznavam, je to velmi slaby argument. 
Ale iny asi nenajdete. Teda okrem "vzdy to tak bolo" a "takto je to
normalne".

wek


----- Original Message ---------------
To, ze lze delat aritmetika, budiz, to je samozrejme prasarna, tj. ve 
smyslu jeden int + jeden bool = skoro 2 floaty ;)
Ale ktera (at uz implicitni nebo explicitni) konverze v C mi muze nejak 
zmastit 0 a nenulu na neco jinyho, aby pak boolove porovnani nefungovalo?
J.

On 08.09.2023 13:11, Jan Waclawek wrote:
> No zakladny problem v tom C je, ze ten _Bool je dodatocny hack, a je to
> celociselny typ.
>
> V "lepsich" jazykoch je to jednoducho iny nez celociselny typ, takze veci
> ako porovnanie neprichadzaju (bez explicitneho pretypovania, napr. cez
> ord()) do uvahy, takze toto jednoducho nie je otazka.
>
> Lenze v C, kedze to je celociselny typ, da sa s nim robit aritmetika
> (vratane porovnania s inymi celociselnymi hodnotami) a treba mu priradit
> hodnotu; no a 0 aj 1 sa daju reprezentovat vo vsetkych ostatnych
> celociselnych typoch, takze tam je najmenej problemov pri konverziach.
>
> wek
>
> ----- Original Message ---------------
>
> Jeste jsem nad tim dumal a rikam si, proc je true dano jako 1? Jedine,
> co me napada, je kvuli porovnani, ale kdo by to delal?
>
> Ziju v tom, ze ve drevnich dobach se definovalo FALSE 0 a TRUE !FALSE
> (nebo 1!=0 a 1==1) a pak se na vyhodnocovani pouzivaly jen 'kratke' ify
> a boolovska logika, proto mit TRUE definovano jako 1 neni vlastne k nicemu.
>
> tj. kdo pise if( result == true ) vs if( result )?
>
> J.



Další informace o konferenci Hw-list