简体   繁体   中英

What does this macro define?

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.

认为它返回内存(RAM)的基地址(0):)

It defines "sram" as a pointer to memory starting at zero. You can access memory via the pointer, eg 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.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM