ceckovy kviz 2 (hardcore)
Jan Waclawek
konfera na efton.sk
Středa Září 6 17:39:15 CEST 2023
>Takato konstrukcia je teda riadna zhovadilost :)
>
> Samozrejme goto doprostred
> ciziho bloku je zlo a mel by na to byt aspon warning ;)
Plny suhlas. goto considered harmful. Ale je dovolene, takze musi mat
nejake pravidla...
> Myslel jsem si, ze vzdy 10. Godbolt rika 10. Nevim, proc by to melo byt
> jinak a co je na tom hardcorove kvizoveho?
>V oboch pripadoch 10. Nemam na to zdovodnenie podla normy, takto by som
>kod nikdy nenapisal, takze som nemal dovod studovat to. Vychadzam len z
>toho, ako prekladac preklada if-else.
Norme je fuk, ako sa zvyknu pisat prekladace. Norma hovori doslovne len to,
ze sa skace (je tam pouzite slovo "jump") na prikaz za navestim. No tak
tam skocim a vykonam ho. A potom narazim na else.
No a norma tiez hovori, ze v if(C) A else B; sa A vykonava ak je vyraz C
nenulovy, a B ak je nulovy.
Ja si toto viem napriklad vysvetlit takto: ak narazim na else, pozriem sa
do mojho zoznamu vyhodnotenych vyrazov, ci som uz vyhodnocoval
predchadzajuci if. Aha, nevyhodnocoval, tak toto je vyborna prilezitost ho
vyhodnotit a ak je nulovy, vykonat to co je na else.
Lenze...
Ked sme sa bavili o if(A), tak som sa pozrel, ako to je v C99 vysvetlene.
Skutocne, v 6.8.4.1 je explicitne pre if(C) napisane to s tym nulovym a
nenulovym vyrazom (_Bool je v C dodatocne domyslene; v C++ je uz bool
nativny typ a pre vsetky podmienky je to teda sformulovane tak, ze sa
vyraz konvertuje na bool a podla toho sa sprava).
A tam som uvedel aj:
If the first substatement is reached via a label, the second substatement
is not
executed.
Cize ano, mate pravdu, k bude vzdy 10; ale nie je to kvoli tomu lebo "tak
je to normalne", ale kvoli tomu, ze je to explicitne predpisane... :-)
wek
Další informace o konferenci Hw-list