Portál AbcLinuxu, 11. května 2025 06:39

Dotaz: C - vyhodnocování složitějších podmínek

1.5.2010 15:51 CeckoX
C - vyhodnocování složitějších podmínek
Přečteno: 262×
Odpovědět | Admin
Ahoj. Jakým způsobem vyhodnotí C (kompilátor avr-gcc) tuto podmínku:

if(i>-1 && pole[i] == neco) { ...

?

Pokud se nesplní levá část, bude se pokračovat pravou a tudíš dojde k havárii(dostane se to mimo pole) nebo se vyhodnocování zastaví pokud není splněna první podmínka?

Řešení dotazu:


Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

1.5.2010 16:13 Tomáš Heger (geckon) | skóre: 62 | Praha/Valašsko
Rozbalit Rozbalit vše Re: C - vyhodnocování složitějších podmínek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Standardní chování by mělo být částečné vyhodnocování -> pokud není splněna první podmínka, druhá se ani neověřuje.
Řešení 2× (jka, Murry)
Bluebear avatar 1.5.2010 17:21 Bluebear | skóre: 30 | blog: Bluebearův samožerblog | Praha
Rozbalit Rozbalit vše Re: C - vyhodnocování složitějších podmínek
Odpovědět | | Sbalit | Link | Blokovat | Admin
Podle pravidel C je povinné zkrácené vyhodnocení výrazu: kompilátor nejprve vyhodnotí "i>-1" a pokud je výsledek nepravdivý, druhá část už se nevyhodnocuje a celý podmíněný blok se přeskočí (tedy přístup do pole už se neprovede a program nezhavaruje).

Kdyby se to zkompilovalo jinak, byl by to zásadní bug kompilátoru.
To mi připomíná, jak jsem si pořídil květináč, že v něm budu mít květinu. Opravdu tam byla, ale potom být přestala...

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.