Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.6.PODSTAWYJĘZYKÓWPROGRAMOWANIA
39
Okazujesięwięc,żezrozumieniealiasowaniaimechanizmów,którejetworzą,
jestkluczowe,jeślikompilatormazoptymalizowaćprogram.Jakzobaczymy,
począwszyodrozdziału9,istniejewielesytuacji,wktórychbędziemymoglizop-
tymalizowaćkodtylkowtedy,gdybędziemymiećpewność,żeokreślonezmienne
niesąaliasowane.Naprzykładmożemyustalić,że
x=2
jestjedynymmiejscem,
wktórymzmienna
x
otrzymujejakąśwartość.Jeślitakjest,możemyzastąpić
użyciezmiennej
x
użyciemstałej2;naprzykładmożemyzastąpićprzypisanie
a=x+3
prostszym
a=5
.Przypuśćmyjednak,żejesttujeszczejednazmienna
y
,
którajestaliasem
x
.Wówczasprzypisanie
y=4
możemiećnieoczekiwanyefekt
zmieniającywartość
x
.Możetorównieżoznaczać,żezastąpienie
a=x+3
przez
a=5byłopomyłką;poprawnąwartościąwtymmiejscumożebyćbowiem7.
1.G.;.Ćwiczeniadopodrozdziału1.G
Ćwiczenie1.6.1:
DlastrukturalnegoblokukoduwjęzykuCpokazanego
narysunku1.13(a)podajwartościprzypisanedow,x,yiZ.
Ćwiczenie1.6.2:Powtórzćwiczenie1.6.1dlakoduzrysunku1.13(b).
Ćwiczenie1.6.3:
Dlakoduostrukturzeblokowejzrysunku1.14,zakłada-
jączwyczajowystatycznyzasięgdeklaracji,podajzasięgkażdejzdwunastu
deklaracji.
intw,x,y,z;
inti=4;intj=5;
{
intj=7;
i=6;
w=i+j;
}
x=i+j;
{
inti=8;
y=i+j;
}
z=i+j;
(a)Koddoćwiczenia1.6.1
intw,x,y,z;
inti=3;intj=4;
{
inti=5;
w=i+j;
}
x=i+j;
{
intj=6;
i=7;
y=i+j;
}
z=i+j;
(b)Koddoćwiczenia1.6.2
RYSUNEK
1013:Kodostrukturzeblokowej
Ćwiczenie1.6.4:CozostaniewypisaneprzezponiższykodC?
#definea(x+1)
intx=2;
voidb(){x=a;printf("%d\n",x);}
voidc(){intx=1;printf("%d\n"),a;}
voidmain(){b();c();}