nevyuzite funkce v C

Pavel Chromy mac
Středa Březen 17 14:27:56 CET 2004



On Mon, 11 Feb 2002, [windows-1250] Du?an Slav?t?nsk? wrote:

> Bude asi nutno radky odkomentovat. Pokud se totiz pri prekladu ve zdrojaku
> vyskutuje nejaka funkce linker ji spravne prilinkuje k vyslednemu kodu. A to
> i pres to ze se volani nemuze nikdy uskutecnit. 
> 
> Napr:
>     ...
>     return;
>     VolanaFunkce();
>     ...
> 
> Podle teto ukazky by kompilator mohl poznat ze tato funkce je nepotrebna. Co
> ale memuze zjistit ani kompilator ani linker je to ze muzeme volat funkci
> pres ukazatel.

Prave naopak - to ze neni mozne volat funkci pres ukazatel se pozna velmi
snadno - ono totiz ten ukazatel musi byt nekde inicializovany,
a na to aby obsahoval adresu funkce musi byt nekde v programu alespon
jednou pouzit identifikator funkce bez funkcnich zavorek.
Pokud se timto zpusobem identifikator funkce nepouzije, program
nemuze zadnym legalnim zpusobem ziskat adresu funkce.

Nicmene ani toto, ani to co je uvedeno v prikladu neni vubec
prace pro linker - ten nemuze zjistit, ze
takovou funkci nema zalinkovat - toto musi zajistit uz kompilator, pokud
umi delat 'unreachable code' optimalizaci a odkaz za funkci se nebude
vyskytovat uz v kompilatorem vytvorenem object souboru.

Linker muze pouze nezalinkovat funkce, na ktere neexistuji odkazy z
zadneho object souboru. A to bez jakychkoliv obav, ze tam ta funkce bude
chybet.

	Pavel Chromy





Další informace o konferenci Hw-list