definice externi konstanty v C

Hynek Sladky econf@centrum.cz
Úterý Prosinec 4 14:43:38 CET 2007


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

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


Hynek Sladky


Miroslav Sinko wrote:
> No tak asi nerozumiem... Protirecite si, lebo #define vam nevyhovuje z
> dovodu, ze to nema spracovavat kompilator, ale az linker a teraz opat
> pisete o kompilatore..
> 
> Napiste prosim, co si predstavujete pod pojmom "externe definovana
> konstanta". Akoze kde definovana?
> 
> Napriek tomu, ze teraz celkom nerozumiem otazke, skusim este 1 tip. V
> nastaveniach projektu (GUI, makefile... podla prostredia, v ktorom
> programujete) sa spravidla da zadefinovat subor konstant platnych pre
> projekt. Ale ono to nie je nic ine od toho, ako keby ste zapisali to
> #define v headri, ktory je includovany vo vsetkych zdrojakoch projektu.
> 
> miro
> 
> 
> --- Hynek Sladky <econf@centrum.cz> wrote:
> 
> 
>>Jak uz jsem psal:
>>
>>extern unsigned char konst_maska;
>>
>>se pouzije jako odkaz na promennou, nikoli jako vlastni konstanta.
>>Tj. provede se cosi jako
>>ld e,(konst_maska)
>>or e
>>
>>misto rovnou pouziti (cehoz bych chtel dosahnout):
>>or konst_maska
>>
>>Otazka tedy zustava: jak rict kompilatoru, ze dany identifikator je 
>>externe definovana konstanta (nikoli externe definovana konstantni 
>>promenna)?
> 
> 



Další informace o konferenci Hw-list