Zobrazit stránkuStarší verzeZpětné odkazyNahoru Tato stránka je pouze pro čtení. Můžete si pouze prohlédnout zdrojový kód, ale ne ho měnit. Zeptejte se správce, pokud si myslíte, že něco není v pořádku. ====== Inkrementace, dekrementace ====== Inkrementace ''++'' a dekrementace ''- -'' jsou operátory, které zvětší, resp. sníží hodnotu proměnné o hodnotu 1. Velmi se používají například v cyklech ''for''. Můžeme je nahradit standardním operátorem přiřazení. Příkaz ''x++;'' je ekvivalentní příkazu ''x = x + 1;''. ===== Příklad ===== <code c> int cislo = 41; cislo++; printf("%d\n", cislo); cislo--; printf("%d\n", cislo); </code> Výstupem tohoto kódu bude: <code bash> 42 41 </code> ===== Prefixová a postfixová syntaxe ===== Oba tyto operátory se dají použít jak v **prefixové formě**: ''++n;'', tak i v **postfixové formě**: ''n++''. Rozdíl těchto dvou syntaxí je okamžik, kdy dojde k přičtění/odečtění jedničky. **Prefixová syntaxe** změní hodnotu referované proměnné před vyhodnocením výrazu. **Postfixová syntaxe** změní hodnotu referované proměnné po vyhodnocení výrazu. ==== Příklad prefix vs postfix ==== <code c> int x = 41; printf("%d\n", ++x); if (x-- == 42) puts("Foo"); </code> Výstupem tohoto kódu bude: <code bash> 42 Foo </code> Protože hodnota 41 je inkrementována předtím, než je vypsána. A v příkazu ''if'' je její hodnota zmenšena až po vyhodnocení podmínky. ===== Limitace použití těchto operátorů ===== Funkce těchto operátorů je v C/C++ značně omezená a snadno můžeme dosáhnout nedefinovaného chování, které někdy nebude kompilátorem vyhodnoceno jako chybné, ale výsledek se může na jiném systému značně lišit. Proto dbáme na to, ať **používáme jen jeden operátor inkrementace/dekrementace v rámci jednoho výrazu** Několik příkladů nesprávného použití * ''++a++;'' * ''++(++i);'' * ''a+++++b;'' ===== Odkazy ===== * [[https://en.cppreference.com/w/cpp/language/operator_incdec]] * [[https://stackoverflow.com/questions/45786179/why-cant-you-increment-decrement-a-variable-twice-in-the-same-expression|Why can't you increment/decrement a variable twice in the same expression?]] * [[https://stackoverflow.com/questions/5341202/why-doesnt-ab-work|Why doesn't a+++++b work?]] * [[https://stackoverflow.com/questions/4176328/undefined-behavior-and-sequence-points|Undefined behavior and sequence points]] ccpp/inc-dec.txt Poslední úprava: 2024/01/03 09:49autor: bures