Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
56
ROZDZIAŁ6.FUNKCJE
rompowyższyzapisbywaprzydatny,zwłaszczagdychcemypozostawićmiejscena
uzupełnionynapóźniejszymetapierozwojuprogramukod.
Wponiższychpodrozdziałachprzedstawiononajważniejszeaspektykomunikacji
pomiędzyfunkcjami.
6.1
Zwracaniewartościprzezfunkcję
Mechanizmemsłużącymdozwróceniakonkretnejwartościprzezfunkcjęjestin-
strukcjareturn.Możeonawystąpićwdowolnymmiejscukodufunkcji(takżewie-
lokrotnie)izostaćuzupełnionawyrażeniem:
returnwyrażenie;
Typwyrażeniazostaniewraziepotrzebyskonwertowanydotypu,któryfunkcja
deklarujejakotypzwracany.Funkcjamożezwracaćdowolnytyparytmetyczny,
strukturę,unię,wskaźniklubtyppusty,niemożezaśzwracaćtablicyaniinnej
funkcji.WartośćzwracanaprzezfunkcjęjęzykaCmożebyćtylkojedna.
Funkcjawywołującainnąfunkcjęniejestzobowiązananodebrać”zwracanej
przezdrugąfunkcjęwartościmożezignorować.Cowięcej,instrukcjareturn
niemusibyćwcaleuzupełnionawyrażeniem,wktórymtoprzypadkunicniejest
przezfunkcjęzwracane.Niejestnawetnielegalnezastosowaniewjednejfunkcjiin-
strukcjireturnzwyrażeniemibezniego,choćniejesttodobrąpraktykąprogrami-
styczną.Trzebatakżewiedzieć,żejeślifunkcjawywołującadanąfunkcjęspodziewa
sięzwracanejwartości,afunkcjapodrzędnajejniezwróci,odebranaprzezfunk-
cjęnadrzędnąwartośćbędziecałkowicieprzypadkowa.Staniesiętakdlatego,że
funkcjanadrzędnapobierzewartośćzobszarupamięcilubrejestruprocesora,który
zostałprzyporządkowanywartościzwracanejprzezfunkcjępodrzędną,aktórynie
zostałzapełnionywtrakciewykonywaniakodutejfunkcji.
Jeślifunkcjawzamyśleprogramistyniepowinnaniczegozwracać,należyzade-
klarowaćjakonpustą”(odang.voidpusty):
voidfunkcja(argumenty);
Wtakimprzypadku,jeśliwkodziefunkcjiumieścisięwyrażeniepoinstrukcji
return,kompilatorzasygnalizujebłąd,gdyżwartościzwracanejniezostałprzypo-
rządkowanyżadenobszarpamięcianirejestr,iniewiadomo,gdzieumieścić.
Należytutajpodkreślić,żezgodniezestandardemANSI/ISOCfunkcjama-
in()niemożebyćzadeklarowanajakoniezwracającażadnegorezultatu.
Wymógtenwynikazesposobu,wjakijesturuchamianyprogramwjęzykuC(cho-
dziotzw.Cstart-upcode),którybezwzględniewymagawartościzwracanejtypu
int.Zadeklarowaniefunkcjimain()jakopustejmożezatemspowodowaćpobranie
jejargumentów,lubnawetwykonywalnegokodu,zniewłaściwegoobszarupamięci.