intMax(intx,inty){return(x>y? x : y);}intMin(intx,inty){return(x<y?x:y);}当然 , 也可以使用宏来代替上面的函数 , 代码如下:
#defineMAX(x,y)(((x)>(y))?(x):(y))#defineMIN(x,y)(((x)<(y))?(x):(y))在C程序中 , 我们可以适当地用宏代码来提高执行效率 。宏代码本身不是函数 , 但使用起来与函数相似 。预处理器用复制宏代码的方式代替函数调用 , 省去了参数压栈、生成汇编语言的CALL调用、返回参数、执行return等过程 , 从而提高了运行速度 。但是 , 使用宏代码最大的缺点就是容易出错 , 预处理器在复制宏代码时常常产生意想不到的边际效应 。关于带参宏的笔记:【C语言笔记】学习使用带参宏(一)、【C语言笔记】学习使用带参宏(二)
因此 , 尽管看起来宏要比函数简单得多 , 但还是建议使用函数的形式来封装这些简单功能的代码 。
函数地抽象级别应在同一个层次先来看下面一段示例代码:
voidInit(void){/*本地初始化*/....../*远程初始化*/InitRemote();}voidInitRemote(void){/*远程初始化*/......}上面地Init函数主要完成本地初始化与远程初始化工作 , 在其功能上没有什么不妥之处 。但从设计观点看 , 却存在这一定缺陷 。因为本地初始化与远程初始化层次相当 , 本地初始化也应当作为独立的函数存在 。应改为:
voidInit(void){/*本地初始化*/InitLocal();/*远程初始化*/InitRemote();}voidInitLocal(void){/*本地初始化*/......}voidInitRemote(void){/*远程初始化*/......}尽量避免在非调度函数中使用控制参数在函数设计中 , 我们可以将函数简单地分为两大类:调度函数与非调度函数(非调度函数一般也称为功能函数或实现函数) 。
所谓的调度函数是指根据输入的消息类型或控制命令来启动相应的功能实体(即函数或过程)的函数 。调度函数本身不能提供功能实现 , 相反 , 它必须委托给实现函数来完成具体的功能 。也就是说 , 调度型函数永远只关注“what to do” , 而“how to do”则是由实现函数来关心的 , 调度函数不需要关心“how to do” 。这种调度函数与实现函数的分离设计也满足了单一职责的原则 , 即调度的不实现 , 实现的不调度 。
对调度函数来讲 , 控制参数是指改变函数功能行为的参数 , 即函数要根据此参数来决定具体怎样工作 。然而 , 如果在非调度函数中也使用控制参数来决定具体怎样工作 , 那么这样做无疑会增加函数间的控制耦合 , 很可能使函数间的耦合度增大 , 并使函数的功能不唯一 , 违背了函数功能的单一原则 。示例代码如下:
intCalculate(inta,intb,constintcalculate_flag){intsum=0;switch(calculate_flag){case1:sum=a+b;break;case2:sum=a-b;case3:sum=a*b;break;case4:sum=a/b;break;default:printf("errorn");break;}returnsum;}上面的函数虽然看起来很简洁 , 实际上这种设计是不合理的 。由于控制参数calculate_flag的原因 , 使函数间的耦合度增大 , 也违背了函数的功能单一原则 。因此 , 不如分为如下4个函数清晰 , 示例代码如下:
intAdd(inta,intb){returna+b;}intSub(inta,intb){returna-b;}intMul(inta,intb){returna*b;}intDiv(inta,intb){returna/b;}
【超炫酷技巧!C语言代码优化的技巧】
推荐阅读
- 女性外出时,如何保持安全9个技巧
- 崂山绿茶价格,购买崂山绿茶的技巧
- 口红花养护技巧
- 淘宝论坛发帖置顶的七个技巧 淘宝怎么发帖子
- 小罐茶滇红的价格是多少,正山小种茶的冲泡技巧
- 淘宝直播间冲榜小技巧 淘宝直播权重排名靠前是怎么做到的
- 可乐姜汤,红茶的调饮及冲泡技巧
- 水疗会所装修设计技巧
- 超级推荐优化目标选哪个 超级推荐设置技巧
- 面对 MySQL 查询索引失效,程序员的六大优化技巧!
