[ salec @ 11.06.2004. 10:20 ] @
Tj. na pr.:
Code:


#define BROJ_ONOG_REGISTRA 6

....

#define IME_REGISTRA(a)  registar##a     // identifikatori registri
#define MOJREG  IME_REGISTRA(BROJ_ONOG_REGISTRA) 


I sad, kad negde u kodu napisem na primer:
Code:

volatile char registar0, registar1, registar2, registar3, registar4, registar5, registar6;

.....

MOJREG = 0x05;


Kompajler nece videti:
Code:
registar6 = 0x05;
kako bih ja zeleo, nego:
Code:
registarBROJ_ONOG_REGISTRA = 0x05; 


Kako da forsiram izvrsenje makrozamene parametara ovog makroa koji vrsi konkatenaciju? U K&R pise da ¨prisustvo ## stiti argumente spoljasnjeg poziva od prosirenja¨. Ima li tome leka(, doskocice, resenja, workarounda)?
[ salec @ 11.06.2004. 12:59 ] @
Resio sam!

Otprilike ovako:
Code:


#define BROJ_ONOG_REGISTRA 6

....

#define IME_REGISTRA(a)  registar##a     // identifikatori registara
#define POMOC(a)  IME_REGISTRA(a) 
#define MOJREG  POMOC(BROJ_ONOG_REGISTRA) 



Makro POMOC sluzi samo zato da bi parametar bio razvijen pre nego sto se prosledi u IME_REGISTRA.