一个C语言的宏定义语句

来源:百度知道 编辑:UC知道 时间:2024/04/29 19:33:40
unsigned save_offset=0;
#define WRITE(DATATYPE,DATA) {*(DATATYPE*)(save_offset)=DATA;save_offset +=sizeof(DATATYPE);}

请问这个宏定义是什么意思
其中的 save_offset是指针变量还是普通变量

#define WRITE(DATATYPE,DATA) do{*(DATATYPE*)(save_offset)=DATA;save_offset +=sizeof(DATATYPE);}while(0)

我建议宏这样写比较好,可以避免很多麻烦。
save_offset 是unsigned int型。意思是存放指针地址数据的地方,不是指针类型,是你所说的普通变量,0-65535之间(我取的是2个字节所以是2的16次方 - 1,但不一定是这个数,根据编译器不同而不同)。

DATATYPE 是变量类型 譬如 int ,char型。
(DATATYPE*)(save_offset) 强制转换为DATATYPE类型指针;*(DATATYPE*)(save_offset)意思是在0x0000地址写入DATA。
save_offset +=sizeof(DATATYPE) 这句话意思是 save_offset取下一个地址。
这个宏定义的主要功能是 在0x0000开头的内存中写入DATATYPE数据。

例如:
WRITE(char,128);
宏展开之后是:
do{*(char*)(save_offset)=128;save_offset +=sizeof(char);}while(0)
执行过后
在内存地址为0x0000处写入数据128占据sizeof(char)个字节,并在0x0000 + sizeof(char)处等待下一个数据的写入。

大概就是这个意思。

save_offset是无符号整型变量, 不是指针变量
这个宏的意思为:
将特定数据类型(DATATYPE)的变量(DATA)值, 赋给由save_offset变量值指向的内存单元, 并将下一个DATATYPE变量的地址赋给save_offset变量

~~有点儿绕口哟, BG就是这个意思啦...