Foo może być dowolną liczbą - nie została zainicjowana przy tworzeniu.
Nawet gdyby była inicjowana, nie można na 100% określić jaką wartość będzie miała po wykonaniu powyższego kodu - standard nie definiuje sytuacji w której używamy w ten sposób inkrementacji/dekrementacji.
To co określa standard, to to że po każdym z instniejących punktów sekwencji wszystkie poprzednie wyrażenia zostały wykonane, a żadne następne jeszcze nie były wywołane. Jedynym punktem sekwencji w wyrażeniu
foo = ++bar * 4 + ++bar * 9 + bar--;
jest ; wiec jedynym pewnikiem jest to, że po wykonainiu tej linijki bar jest równe 5.
Można rozważyć inny przypadek:
int foo=0;
int bar = 4;
foo = bar++ ? ++bar * 10 : 0;
W tym przypadku na pewno foo = 60 a bar 6: punkty sekwecji stanowi wyrażenie ?: oraz ; tak więc najpierw następuje postinkrementacja bar i sprawdzenie wartości bar (i tukoniec pierwszego punktu sekwencji, po nim bar = 5), a następnie wykonywany jest kod pomiędzy ? a :