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