C语言学习应该注意的地方
#define DUMP_WRITE(addr,nr) do {memcpy(bufp,addr,NR);buf+= NR;} while(0)
If以下# define dump _ write (addr,NR) memcpy (bufp,addr,NR);buf+= NR;
或者:# define dump _ write (addr,NR) {memcpy (buff,addr,NR);buf+= NR;}
在某些情况下,宏定义可能会有错误。尤其是在if else中,很容易出现语法错误。
为了提高数据结构的通用性,可以使用宏来操作数据结构。
例如;
# define INIT _ LIST _ HEAD(ptr)do {(ptr)-> next =(ptr);(ptr)-> pre =(ptr);}while(0)
当然也可以使用inline函数。
一个求结构头地址的宏:
写一个带参数的宏get _ struct _ addr _ from _ member _ addr(p,stru,m),可以根据某个成员的地址计算任意结构实体的地址,其中参数p是指向该成员的指针,stru是结构,m是。
答案如下:
# define get _ struct _ addr _ from _ member _ addr(p,stru,m)
(stru *)((char *)p-(char *)&((stru *)0
0条评论