inline assembler v C

Ing. Pavel PaJaSoft Janousek janousek na fonet.cz
Čtvrtek Listopad 22 08:23:59 CET 2001


Michal Ludvig wrote:
> kdyz je v tom stejnem souboru definovana a mela by byt (pokud dobre
> chapu direktivu inline) vlozena na misto, kde se vola a tudiz by na ni
> nemela byt zadna reference.

	Vklada ji na misto (mel by) primo kompilator, linker s tim nema nic
spolecneho, takze mohou nastat dva stavy:

a) vyuzije informaci inline => linker tu funkci uz nevidi, protoze kod
byl doplnen kompilatorem
b) nevyuzije informaci inline => linker vidi odkaz na funkci a hleda ji
standardnim zpusobem (resolvovani)

	=> inline funkce mohou byt soucasti hlavickovych souboru nebo primo
souboru, ktery kompiluji __a nikde jinde__.

	Pokud mam extern, tak drive (snad i) platilo, ze jedna definice (nikoli
deklarace) musi byt bez extern, ostatni (deklarace) jsou pouze
'virtualni' odkazy. Skutecne se jistou dobu a v nekterych kompilatorech
muselo rucne napr. pres preprocesor zjistovat, zda-li pri parsovani jsem
aktualne v headeru => extern a nebo v souboru s definici => C source,
kde extern nesmelo byt. Pozdeji se prislo na to, ze tuto informaci je
schopen detekovat sam kompilator (deklarace vs. definice) a ze toto
rozdeleni neni treba. Ostatne i dnes se bude kompilator (aspon si to
myslim) vztekat, pokud budete mit X deklaraci extern toho sameho, ale
vice nez jednu definici...

	Abych to shrnul, nevim o rozumnem vyuziti 'extern inline' vyjma
pripadu, kdy ta deklarace i definice je primo v hlavickovem souboru (a
tedy prichazi v potaz pri kompilaci), jinak to pozbyva vyznamu a
kompilator sice vyplodi nejaky relativne spravny kod, ale linker je z
toho opravnene tumachovej (on o inline IMHO vubec nic nevi - resolvuje
odkazy => 'inline' pozbyva vyznamu).

-----------------------------------------------------------------------
Ing. Pavel Janousek (PaJaSoft)                 FoNet, spol. s r. o.
Vyvoj software, Intranet / Internet          Sokolova 67, 619 00 Brno
E-mail: mailto:Janousek na FoNet.Cz             Tel.: +420  5  4324 4749
SMS:    mailto:P.Janousek na SMS.Paegas.Cz      Fax.: +420  5  4324 4751
WWW:    http://WWW.FoNet.Cz/               E-mail: mailto:Info na FoNet.Cz
-----------------------------------------------------------------------


Další informace o konferenci Linux