C 应该注意的地方

来源:互联网 发布:js调用ios相册 编辑:程序博客网 时间:2024/05/16 19:05

     刚才在CU里面看到一个关于宏的帖子,不解,随查《linux内核情景分析》(其中的一小节),呵呵。

 

 

<1>  #define DUMP_WRITE(addr,nr)  do {memcpy(bufp,addr,nr); buf += nr ;} while(0)

 

如果如下 #define DUMP_WRITE(addr,nr)  memcpy(bufp,addr,nr); buf += nr ;

或者  :#define DUMP_WRITE(addr,nr)  {memcpy(bufp,addr,nr); buf += nr ;}

在有的情况宏定义的时候可能会出错。特别是if else 中容易出现语法错误。

 

<2> 为了提高数据结构的通用性,可以用宏对数据结构进行操作。

如 ;

         #define INIT_LIST_HEAD (ptr)  do {(ptr)->next= (ptr);  (ptr)->pre= (ptr);}while(0)

 

当然也可以使用inline 函数。

 

<3> 一个求结构体首地址的宏:

      写一个带参数宏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)->m) )

 

主要是强制类型转换,以前看信号的时候,有把0,1,2强制类型转化成 struct * 类型的,不解,现在有点眉目了。嘿嘿。

    刚下了一篇,发表的时候怎么没了,重新写了,没写大详细。晕.............

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 被红头蛇咬了怎么办 爸妈吵架闹离婚怎么办 包包用酒精擦了怎么办 灰色泰迪毛发白怎么办 手被野猫抓伤了怎么办 想去香港玩两天怎么办 受凉了一直想吐怎么办 受寒后头晕想吐怎么办 肚子受凉了想吐怎么办 想吐但吐不出来怎么办 抽烟抽的牙黄怎么办 借了大耳窿的钱怎么办 5岁左眼视力不好怎么办 老公才30性不行怎么办 老婆出轨跑了怎么办啊 海螺吃多了头晕怎么办 读书的好与不好怎么办 衣服泡久了发黄怎么办 白衣服洗变色了怎么办 高达贴纸贴错了怎么办 小孩大门牙长歪怎么办 小孩乳牙长歪了怎么办 小孩牙齿张歪了怎么办 8小孩门牙长歪了怎么办 婴儿乳牙长歪了怎么办 模拟人生4胖了怎么办 磁吸静音锁消磁怎么办 学生脸上长痘怎么办呢 脖子两边的筋疼怎么办 脸上长脓包型痘痘怎么办啊 吃了两把消炎药怎么办 对叛离期的孩子怎么办 信耶稣家里有佛怎么办 高达模型装错了怎么办 被别朋友误会了怎么办 被喜欢的人误会怎么办 同事误会我了该怎么办 别人误解你你该怎么办 神武孩子喂错了怎么办 神武孩子吃错了怎么办 肚子饿没东西吃怎么办