Code:
#define BROJ_ONOG_REGISTRA 6
....
#define IME_REGISTRA(a) registar##a // identifikatori registri
#define MOJREG IME_REGISTRA(BROJ_ONOG_REGISTRA)
#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;
volatile char registar0, registar1, registar2, registar3, registar4, registar5, registar6;
.....
MOJREG = 0x05;
Kompajler nece videti:
Code:
registar6 = 0x05;
kako bih ja zeleo, nego:registar6 = 0x05;
Code:
registarBROJ_ONOG_REGISTRA = 0x05;
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)?