Treść książki
Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
1.6.PODSTAWYJĘZYKÓWPROGRAMOWANIA
35
Deklaracjeidefinicje
Pozorniepodobneterminyndeklaracja”indefinicja”używanewkoncepcjach
językówprogramowaniawrzeczywistościsązupełnieróżne.Deklaracje
informująnasotypachpewnychbytów,podczasgdydefinicjemówiąnam
oichwartościach.Zatemintijestdeklaracjązmiennej
ź
,podczasgdyi=1
jestjejdefinicją.
Rozróżnienietojestbardziejznaczące,gdymamydoczynieniazmeto-
damilubinnymiprocedurami.WC++metodajestdeklarowanawdefinicji
klasyprzezpodanietypówargumentówiwynikutejmetody(częstojest
tonazywanesygnaturąmetody).Następnie,winnymmiejscumetoda
jestdefiniowana,czylipodawanyjestkodwykonaniatejmetody.Ana-
logicznieczęstospotykanejestdefiniowaniefunkcjiCwjednympliku
izadeklarowaniejejwinnychplikach,wktórychtafunkcjajestużywana.
Przykład1.7:
WprogramiewjęzykuCpokazanymnarysunku1.12identy-
fikator
a
jestmakrem,którezawierawyrażenie(
x
+1).Aleczymjest
x
?Nie
jesteśmywstanieustalićwartości
x
statycznie,czylianalizująctekstprogramu.
#definea(x+1)
intx=2;
voidb(){intx=1;printf("%d\n",a);}
voidc(){printf("%d\n",a);}
voidmain(){b();c();}
RYSUNEK
1012:Makro,któregonazwymusząmiećzasięgdynamiczny
Wistocie,abymóczinterpretować
x
,musimyużyćzwyczajowejreguły
zasięgudynamicznego.Trzebazbadaćwszystkiewywołaniafunkcji,któresą
aktualnieaktywne,iwybraćostatniowywołanąznich,którazawieradeklarację
zmiennejx.Todotejdeklaracjiodnosisięużyciezmiennejx.
Wprzykładziezrysunku1.12funkcjamainnajpierwwywołujefunkcję
b
.
Wtrakciewykonywaniawypisujeonawartośćmakra
a
.Ponieważ
a
musibyć
zastąpionezapisem(
x
+1),rozwiązujemytoużyciezmiennej
x
przezdeklarację
intx=1
wfunkcji
b
.Powodemjestto,żefunkcja
b
zawieradeklarację
x
,zatem
wyrażenie(
x
+1)w
printf
wfunkcji
b
odnosisiędotego
x
.Tymsamym
wartośćwypisanato2.
Pozakończeniudziałania
b
iwywołaniufunkcji
c
ponowniepotrzebujemy
wypisaćwartośćmakra
a
.Jednaktymrazemjedynymdostępnym
x
jestglobalnie
zdefiniowane
x
.Wyrażenie
printf
w
c
odnosisięzatemdotejdeklaracji
x
izostaniewypisanawartość3.