====== 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 =====
int cislo = 41;
cislo++;
printf("%d\n", cislo);
cislo--;
printf("%d\n", cislo);
Výstupem tohoto kódu bude:
42
41
===== 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 ====
int x = 41;
printf("%d\n", ++x);
if (x-- == 42)
puts("Foo");
Výstupem tohoto kódu bude:
42
Foo
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]]