Skutki uboczne
Kolejność wykonywania wyrażenia jest zdefiniowany przez określonej implementacji, z wyjątkiem gdy język gwarancji określonej kolejności oceny (jak wskazano w priorytet i kolejności oceny).Na przykład skutki uboczne wystąpić w następujących wywołania funkcji:
add( i + 1, i = j + 2 );
myproc( getc(), getc() );
Argumenty wywołania funkcji może zostać oceniony w dowolnej kolejności.Wyrażenie i + 1 mogą być oceniane przed i = j + 2, lub i = j + 2 mogą być oceniane przed i + 1.Wynik jest różne w każdym przypadku.Podobnie, nie jest możliwe zagwarantowanie, jakie znaki są faktycznie przekazywane do myproc.Ponieważ jednoargumentowe przyrostu i osłabienie operacji obejmują przypisań, takich operacji może wywołać efekty uboczne, jak pokazano w następującym przykładzie:
x[i] = i++;
W tym przykładzie wartość x oznacza to modyfikacji jest nieprzewidywalne.Wartość indeksu dolnego może być nowe lub Poprzednia wartość i.Wynik może się różnić w różnych kompilatory lub optymalizacji różnych poziomów.
Ponieważ c nie definiuje kolejność oceny skutków ubocznych, obie metody oceny, omówione powyżej są poprawne i mogą być realizowane albo.Aby upewnić się, że kod jest przenośny i jasne, uniknąć instrukcji, które zależą od określonej kolejności oceny efektów ubocznych.