免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5211 | 回复: 16
打印 上一主题 下一主题

重复使用的多条语句定义为宏,有没有什么缺点 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-25 13:14 |只看该作者 |倒序浏览
本帖最后由 aomw10 于 2011-07-25 13:18 编辑
  1. #define COPY_ACTION_DATA(hc, hae) do {                                          \
  2.     strncpy(hc->action_array[i].name, hae->name, strlen(hae->name));            \
  3.     hc->action_array[i].action_id = hae->action_id;                             \
  4.     hc->action_array[i].addition_data_len = hae->addition_data_len;             \
  5.                                                                                 \
  6.     if( hae->addition_data_len != 0 && hae->data != NULL ) {                    \
  7.         memcpy(hc->action_array[i].data, hae->data, hae->addition_data_len);    \
  8.     }                                                                           \
  9. } while(0)

  10. #define INSERT_ACTION_TO_CONDITION(i, hc, hae)  do {                            \
  11.     for (i = 0; i < HA_MAX_ACTION_IN_CONDITION; i++) {                          \
  12.         if (hc->action_array[i].action_id == 0) {                               \
  13.             memset(&hc->action_array[i], 0x00, sizeof(ha_action_entry_t));      \
  14.             COPY_ACTION_DATA(hc, hae);
  15.             break;                                                              \
  16.         }                                                                       \
  17.     }                                                                           \
  18.     hc->action_count++;                                                         \
  19. } while(0)
复制代码
因为一些逻辑简单的语句块经常被各个地方调用,为了提高可读性,所以写成上面这种宏的形式,排除调试的因素外,请问有什么缺点嘛?

大家有这么用的吗

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
2 [报告]
发表于 2011-07-25 13:23 |只看该作者
写成函数不行么?

论坛徽章:
0
3 [报告]
发表于 2011-07-25 13:25 |只看该作者
写成函数不行么?
hellioncu 发表于 2011-07-25 13:23



    有时候语句块就几行,写成函数总感觉还得多一部分函数调用的开销,没必要

论坛徽章:
324
射手座
日期:2013-08-23 12:04:38射手座
日期:2013-08-23 16:18:12未羊
日期:2013-08-30 14:33:15水瓶座
日期:2013-09-02 16:44:31摩羯座
日期:2013-09-25 09:33:52双子座
日期:2013-09-26 12:21:10金牛座
日期:2013-10-14 09:08:49申猴
日期:2013-10-16 13:09:43子鼠
日期:2013-10-17 23:23:19射手座
日期:2013-10-18 13:00:27金牛座
日期:2013-10-18 15:47:57午马
日期:2013-10-18 21:43:38
4 [报告]
发表于 2011-07-25 13:28 |只看该作者
有时候语句块就几行,写成函数总感觉还得多一部分函数调用的开销,没必要
aomw10 发表于 2011-07-25 13:25



    可以inline呀,听编译器的安排

论坛徽章:
0
5 [报告]
发表于 2011-07-25 13:47 |只看该作者
可以inline呀,听编译器的安排
hellioncu 发表于 2011-07-25 13:28


c语言可以直接用inline吗,看网上说C语言的inline是C99才支持的,会不会不太好用?

论坛徽章:
0
6 [报告]
发表于 2011-07-25 17:20 |只看该作者
回复 1# aomw10


   出错很难查,这是关键

论坛徽章:
0
7 [报告]
发表于 2011-07-26 00:08 |只看该作者
有时候语句块就几行,写成函数总感觉还得多一部分函数调用的开销,没必要
aomw10 发表于 2011-07-25 13:25



    函数调用开销可以忽略不计了,你才不过用几次而已

论坛徽章:
2
天蝎座
日期:2014-03-28 10:18:052015年亚洲杯之乌兹别克斯坦
日期:2015-02-10 11:32:25
8 [报告]
发表于 2011-07-26 13:16 |只看该作者
我感觉这些语句本身的开销已经远大于函数的出入栈开销了

论坛徽章:
0
9 [报告]
发表于 2012-11-15 18:56 |只看该作者
缺点当然有了,用宏定义会造成编译后的程序字节数变大

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
10 [报告]
发表于 2012-11-15 18:59 |只看该作者
不觉得宏满天飞的代码很难读懂么?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP