Téma: Makra #define
Jsem překvapen, že makra fungují, i když ne asi úplně správně.
Např.:
#define SYS_DEVICE_IP_ADDRESS 12
#define SYS_GetIPAddress() SDS_get_u32(SYS_DEVICE_IP_ADDRESS)
#define SYS_GetIPAddress1() SDS_get_u32(12)
(1) unsigned int localAddress = SDS_get_u32(SYS_DEVICE_IP_ADDRESS);
(2) unsigned int localAddress = SYS_GetIPAddress();
(3) unsigned int localAddress = SYS_GetIPAddress1();
Řádek (1) správně přečte IP adresu, např. 192.168.88.88, řádky (2) a (3) jen její spodní část (vrací 0.169.88.88). Je vidět, že se správně dosadí první definovaná konstanta do makra ve druhém #define, protože obě varianty vracejí stejnou hodnotu. Možná něco dělám špatně, když tak vystačím s variantou (1).
Podobně se chovají i makra s parametry, pro každý parmetr je jiná hodnota výsledku, nicméně špatná:
#define HIBYTE(a) ((a >> 24) & 0x000000FF).
A ještě otázka: typedef kompilátor vezme, ale asi to není nijak implementováno, že?