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