Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem Arduino - analogovy pin jako digital pin.

If právě nevyžabuje striktně true/false. Tohle je právě to, na co je potřeba si v céčku dávat pozor. Ono by to sežralo i kdyby výsledek nebyl bool. Takže klidně

if (A=123)...

by taky prošlo, protože bool v céčku ani pořádně neexistuje, je to normální celé číslo, pokud je nula, je to false, pokud něco jiného, je to true. A tím, že i přiřazení má výstupní hodnotu, tak to projde a možná ještě optimalizátor tu podmínku vypustí (nechá jen přiřazení a akce pro splněnou podmínku), protože je mu jasné, že bude vždy splněná. Tohle je potřeba si ohlídat, hlavně pro ty, co jsou zvyklí na pacsal, kde = je porovnání (přiřazení je :=). Obecně v céčku tím, že tam není tak přísná typová kontrola (bool je totéž co int/uint, char je totéž co int, ukazatel je taky kompatibilní s int), překladač sežere různé sémantické nesmysly a programátor se pak nestačí divit.
Na druhou stranu to dává určité možnosti, prostě dá se najít smysluplné využití, kde to usnadní zápis a zpřehlední zdrojový kód (pokud to kód zatemní, tak není dobré se k tomu uchylovat, já třeba mám problémy s konstrukcemi typu ++c*=něco, to mi vždy dá práci rozklíčovat, kam se přiřazuje a přitom při rozepsání na dva řádky c*=něco a c++ nebo opačně je to na první pohled zřejmé).

Dokonce to true ani nemusí být nastavené na 1, když jsem se někdy prodíral programem, zjistil jsem, že je nastavený obvykle jeden bit, ale pokaždé jiný, asi jak se to hodí a jakou instrukci překladač použije. Myslím že jsem tehdy zápasil s podmínkama a rozdílem mezi & a && a podobně, kdyby to byl pořád ten stejný bit, je to jedno, jestli se dělá logická nebo aritmetická operace, ale právě kvůli tomu to jedno nebylo.

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny