[OSy] Test as1/mutex5 a free(const void *)

Martin Decky decky at dsrg.mff.cuni.cz
Mon Oct 26 17:18:06 CET 2009


Hezky den,

> To by vyžadovalo, aby makro bylo definováno v nějakém
> hlavičkovém souboru, který mutex.c inkluduje.

V tomto pripade Vam pochopitelne nepomuze podle hodnoty makra menit to, 
co bude kod delat, tedy mit konstrukce typu

#ifdef DEBUG_MUTEX
...
#endif

v souboru mutex.c. To by samozrejme neumoznovalo menit, jaky kod bude 
mutex.o obsahovat pote, co je jednou prelozen.

Muzete vsak podle hodnoty makra menit, ktery kod se pouzije ve vyslednem 
obrazu kernelu pouzije. Tedy napriklad pouzit konstrukce #ifdef v 
hlavickovem souboru mutex.h.

Zkuste si uvedomit, proc se hodnota makra DEBUG_MUTEX nastavuje v 
souboru as1/mutex5/test.c _pred_ inkludovanim souboru api.h.


Kdyz se podivate do hlavickovych souboru ruznych standardnich ceckovych 
knihoven, pravdepodobne tam taky najdete spoustu pripadu, kdy muzete 
podobnym mechanismem ovlivnit chovani knihovny, aniz byste museli mit 
vice ruznych buildu (v techto situacich se asi casteji pouziva prepinac 
-D na prikazove radce prekladace, jak uz psal pan Demin).

> Druhý dotaz je na hlavičku funkce free(const void *) a potažmo i další
> funkce ze druhého zadání, které vracejí nějaký kus paměti systému. Proč
> je tam to const? Systém přece může po uvolnění páchat cokoliv na daném
> kusu paměti, volající kód nemůže spoléhat, že se uvolněná paměť nebude
> měnit.

Ten "const" se pochopitelne tyka pouze toho ukazatele, nikoliv pameti, 
na kterou argument ukazuje.

Myslim si, ze je naopak dobra praktika uvadet in argumenty funkci jako 
const. Zabrani se tak tomu, aby se uvnitr funkce tyto argumenty omylem 
pouzily (pripadne zneuzily) jako lokalni promenne.


M.D.




More information about the NSWI004 mailing list