definice externi konstanty v C

Miroslav Sinko sinkomiro@rocketmail.com
Úterý Prosinec 4 15:03:48 CET 2007


> Me zajima, jak prekladaci rict, ze hodnota 0x10 je definovana jinde a
> aby ji vyplnil az linker...

No prave toto je kamen urazu. Aspon pokial je mne zname, tak konstanta
(nie const premenna) nema byt ako definovana niekde inde, aby ju bral
do uvahy az linker. Mozte este blizsie napisat, ci si potrebujete
vytvorit aj tu libku, ktorou to tak nejak chcete riesit, alebo uz
nejaku libku mate? To by vyvstala otazka, co v nej vlastne je.

Podla mna mate len tieto 2 moznosti:

1. Kod, ktory ste uviedli, sa da dosiahnut prave tym #define (alebo
definiciou konstanty v nastaveniach projektu) pocas kompilacie.

2. Ak chcete definovat konstantu externe v lib, musi to byt (const)
premenna s pridelenym pamatovym miestom, na ktoru potom vo svojom
zdrojaku odkazete prave tym extern typ meno; Ta sa potom prilinkuje az
linkerom, ale kod bude iny (uviedli ste ho v skorsom maili).

Ine moznosti by boli uz len zlozitejsie, napr. lib by poskytovala
funkciu, ktora vrati hodnotu konstanty...

miro

--- Hynek Sladky <econf@centrum.cz> wrote:

> Spis to nedokazu dostatecne presne vysvetlit...
> 
> Kompilator zkompiluje kod a necha tam nevyplnene odkazy na externi 
> funkce a promenne. Ty pak vyplni linker.
> 
> Protoze potrebuju, aby linker doplnil i konstanty (v obj z asm
> zdrojaku 
> to je v pohode), musim je nejak nadefinovat v C zdrojaku, aby vedel,
> pro 
> jakou hodnotu ma v kompilovanem objektu nechat misto, jak ji
> pouzit...
> Po ruznych zkoumanich se priklanim k nazoru, ze toto v C asi udelat
> nejde...
> 
> Presto to zkusim jeste jednou vysvetlit:
> reg |= 0x10;
> vygeneruje cosi jako
> in a,(reg)
> or 0x10
> out (reg),a
> 
> 
> 
> Hynek Sladky
> 



      ____________________________________________________________________________________
Looking for last minute shopping deals?  
Find them fast with Yahoo! Search.  http://tools.search.yahoo.com/newsearch/category.php?category=shopping



Další informace o konferenci Hw-list