一个C语言的宏定义语句
来源:百度知道 编辑:UC知道 时间:2024/04/29 19:33:40
#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就是这个意思啦...