I read this piece of macro(C code) and was confused in decoding it to know what it defines. What does it define?
#define sram (*((unsigned char (*)[1]) 0))
-AD
I think sram
means "start of RAM".
unsigned char[1]
An array of size 1 of unsigned chars.
unsigned char(*)[1]
A pointer to an array of size 1 of unsigned chars.
(unsigned char (*)[1]) 0
Cast 0 to a pointer to an array of size 1 of unsigned chars.
*((unsigned char (*)[1]) 0)
Read some memory at location 0, and interpret the result as an array of size 1 of unsigned chars.
(*((unsigned char (*)[1]) 0))
Just to avoid 1+5*8+1==42.
#define sram (*((unsigned char (*)[1]) 0))
Define the variable sram
to the memory starting at location 0, and interpret the result as an array of size 1 of unsigned chars.
I think it's returning the base address (0) of memory (RAM) :)
It defines "sram" as a pointer to memory starting at zero. You can access memory via the pointer, e.g. sram[0] is address zero, sram[1] is the stuff at address one, etc.
Specifically it is casting 0 to be a pointer to an array of unsigned char and going indirect through that (leaving an array of unsigned char).
A similar result can be obtained by
#define sram ((unsigned char*)0)
It is also completely undefined in standard C, but that doesn't stop people from using it and having angels fly out of their navels.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With