Vedlejší účinky
Pořadí vyhodnocení výrazů je definováno konkrétní implementací, s výjimkou případů, kdy jazyk zaručuje konkrétní pořadí vyhodnocení (jak je uvedeno v prioritách a pořadí vyhodnocení). V následujících voláních funkce mohou například nastat vedlejší účinky:
add( i + 1, i = j + 2 );
myproc( getc(), getc() );
Argumenty volání funkce mohou být vyhodnoceny v libovolném pořadí. Výraz i + 1
může být vyhodnocen před výrazem i = j + 2
nebo výraz i = j + 2
může být vyhodnocen před výrazem i + 1
. Výsledek se v každém případě liší. Stejně tak není možné zaručit, které znaky budou skutečně předány do procedury myproc
. Jelikož operace unárního zvýšení a snížení zahrnují přiřazení, mohou tyto operace způsobovat vedlejší účinky, jak je znázorněno v následujícím příkladu:
x[i] = i++;
V tomto příkladu nelze předvídat hodnotu x
, která je upravena. Hodnota dolního indexu může být novou nebo předešlou hodnotou i
. Výsledek se může lišit na základě různých kompilátorů nebo různých úrovní optimalizace.
Vzhledem k tomu, že jazyk C nedefinuje pořadí vyhodnocování vedlejších účinků, jsou obě metody vyhodnocení správné a mohou být implementovány. Abyste se ujistili, že je kód přenosný a jasný, je třeba se vyhnout příkazům, které jsou závislé na určitém pořadí vyhodnocení vedlejších účinků.