Sdílet prostřednictvím


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ů.

Viz také

Vyhodnocení výrazu