Funkce a pointery - PICL
Lukas Grepl
L.Grepl@sh.cvut.cz
Pátek Leden 14 21:24:38 CET 2005
> Ja bych rekl, ze funkce vracející volatile unsigned char odpovida ANSI
> C.
Ani ne tak tak vracejici, ale spis prebirajici jako parametr. Tedy neco jako
void foo(volatile unsigned char * p);
> Ale proc vlastne ma tazatel to pole jako volatile unsigned char???
No zrejme proto, ze ho pouziva v preruseni.
> Ja bych rekl, ze zkusenosti s HI-TECH, ze to pobezi i bez volatile.
Pobezi - nepobezi. Tot otazka. Nejspis to ve vetsine pripadu pobezi, ale
muze se stat ze kompilator pouzije nejakou optimalizaci, ktera zpusobi
ze to nepojede. Napada me napriklad kod:
void foo(volatile unsigned char * p)
{
p[0] = 0;
foo2(); // nejak cinnost....
if (p[0])
foo3();
}
Pokud by tam nebylo to volatile, mohl by kompilator predpokladat, ze
kdyz dal do p[0] nulu, ze tam taky zustane a tudiz podminka bude vzdy
false. Kdyz tam je to volatile, vi ze se mu muze ta promenna zmenit "pod
rukama" a nedela o tom zadne predpoklady. V praxi to bude asi jedno, ale
spolehat na to by se nemuselo vyplatit.
Lukas Grepl
Další informace o konferenci Hw-list