Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
Efektyuboczneipunktysekwencji
Przetwarzaniewyrażeniamożeskutkowaćnietylkozwróceniemwartości,aletakżein-
nymizmianamiwśrodowiskuwykonywalnym,zwanymiefektamiubocznymi.Przykłady
takichzmianobejmująmodyfikacjewartościzmiennejlubstrumieniwejścialubwyjścia.
Podczaswykonywaniaprogramuistniejekilkaokreślonychpunktów,wktórychpo-
jawiłysięjużwszystkieefektyubocznejednegowyrażenia,aleniezaszłyjeszczeżadne
efektynastępnegowyrażenia.Takiepunktywprogramiezwanepunktamisekwencji.
Pomiędzydwomakolejnymipunktamisekwencjimożedochodzićdoczęściowegoprze-
twarzaniawyrażeńwdowolnejkolejności.Dlategoprogramistamusipamiętać,abypo-
międzydwomakolejnymipunktamisekwencjiniemodyfikowaćżadnegoobiektuwięcej
niżjedenraz.Otoprzykład:
inti:1;
i:i++;
//OK.
//Źle:dwiemodyfikacjei;zachowaniejest
//nieokreślone.
Ponieważoperacjeprzypisaniaiinkrementacjiwostatniejinstrukcjimogązajśćwdo-
wolnejkolejności,wartość
i
jestnieokreślona.Podobnie,wwyrażeniu
f()+g()
,gdzie
f()
i
g()
dwiemafunkcjami,Cnieokreśla,którewywołaniefunkcjizostaniewykonane
jakopierwsze.Toprogramistamusisięupewnić,żewynikitakichwyrażeńniezależne
odkolejnościwywołania.Innyprzykład:
inti:0,array[]:{0,10,20};
//...
array[i]:array[++i];
//źle:zachowanienieokreślone.
array[i]:array[i+1];++i;
//OK:modyfikacjeoddzielone
//punktemsekwencji.
Najważniejszepunktysekwencjiwystępują:
Poprzetworzeniuwszystkichargumentówwwywołaniufunkcjiiprzedprzekaza-
niemkontrolidoinstrukcjiwewnątrzfunkcji.
Nakońcuwyrażenia,któreniewchodziwskładwiększegowyrażenia.Dotakich
pełnychwyrażeńnależąwyrażeniawinstrukcjachwyrażeniowych(patrzpodroz-
działnInstrukcjewyrażeniowe”wrozdziale6.),wszystkietrzywyrażeniakontrolne
winstrukcjifor,warunkiwinstrukcjachiflubwhile,wyrażeniawinstrukcjach
returniinicjalizatory.
Poprzetworzeniupierwszegooperandukażdegoznastępującychoperatorów:
-&&(logiczneAND)
-||(logiczneOR)
-?:(operatorwarunkowy)
-,(operatorprzecinkowy)
Wyrażeniaioperatory
Jakprzetwarzanewyrażenia
|
75