definice externi konstanty v C

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


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)?

Hynek Sladky


Miroslav Sinko wrote:
> ako som uz pisal:
> 
> extern typ meno_konstanty;
> 
> Je to pre kompilator informacia, ze premenna tohto mena a typu existuje
> v inom module (zdrojak, lib, obj). Teda kompilator sa o nu dalej
> nestara, az linker.
> 
> miro
> 
> 
> 
> --- Hynek Sladky <econf@centrum.cz> wrote:
> 
> 
>>Diky,
>>
>>jenze #define se zpracuje pri kompilaci, nikoli az pri linkovani, coz
>>
>>prave potrebuju.
>>
>>Linker umi to, co chci (viz priklad s assemblerem), ale nevim, jak v
>>C 
>>napsat, aby to pak spravne slinkoval...
>>
>>Hynek Sladky
>>
>>
>>Richard Kaliciak wrote:
>>
>>>Dobry den,
>>>
>>>pouzite #define, napr.
>>>
>>>#define TIMER0PRESCALE		0x04	///< timer 0 prescaler default
>>>
>>>nozete si vytvorit jeden subor hw_config.h, kde si definujete
>>
>>potrebne 
>>
>>>veci a potom ho vsade #include-jete:
>>>
>>>----------------------------------
>>>#ifndef HW_CONFIG_H
>>>#define HW_CONFIG_H
>>>
>>>#define TIMER0PRESCALE		0x04	///< timer 0 prescaler default
>>>
>>>#define LCD_CTRL_RS		0
>>>#define LCD_CTRL_RW		1
>>>#define LCD_CTRL_E		2
>>>
>>>#endif
>>>----------------------------------
>>>
>>>Richard Kaliciak
>>>
>>>
>>>Hynek Sladky schrieb:
>>>
>>>
>>>>Dobry den,
>>>>
>>>>jak definovat externi konstantu v C?
>>>>
>>>>Mam knihovni funkci, ktera (zavisle podle HW na kterem bezi)
>>
>>potrebuje 
>>
>>>>slinkovat s ruznymi konstantami.
>>>>Napr.
>>>>  NejakyReg |= konst_maska;
>>>>
>>>>pokud definuju
>>>>const unsigned char konst_maska=0x20;
>>>>tak se vytvori 8-bit promenna v casti pro kod.
>>>>
>>>>Pritom pokud bych pouzil assembler, tak toto mozne je:
>>>>XREF _konst_maska
>>>>in a,(NejakyReg)
>>>>or _konst_maska
>>>>out (NejakyReg),a
>>>>
>>>>Jenze pouzitim assembleru v C zdrojaku se zdrojak stava znacne 
>>>>neprehlednym, tak bych to radsi udelal rovnou v C, pokud to je
>>
>>mozne...



Další informace o konferenci Hw-list