现在 , a = a + 5和a += 5之间的差别不再那么显著 , 而且现代的编译器为这两种表达式产生优化代码并无多大问题 。
但是 , 要考虑类似如下的语句:
a[2*(y-6*f(x))]=a[2*(y-6*f(x))]+5;a[2*(y-6*f(x))]+=5;此处a为数组 。在第一种形式种 , 由于编译器无从知道f函数是否具有副作用 , 所以它必须两次计算数组a的下标表达式的值 。
而在第二种形式中 , 下标表达式只需计算一次 , 所以第二种形式效率更高 。并且 , 从书写的角度看 , 第一种形式的下标表达式需要书写两次 , 而第二种形式只需书写一次 。
尽量使循环体内的工作量达到最小化循环中 , 随着循环次数的增加 , 会加大对系统资源的消耗 。我们应当确认一些操作是否必须放在循环体内 。示例代码:
for(i=0;i<n;i++){tmp+=i;sum=tmp;}这是个求和操作 , 但是这里每循环一次 , 就要进行一次sum = tmp;操作 , 这样的写法很浪费资源 。这一条语句完全可以移至循环体外:
for(i=0;i<n;i++){tmp+=i;}sum=tmp;这样 , sum = tmp;语句只执行一次 , 不仅可以调高程序效率 , 也提高了可读性 。同时 , 我们还可以考虑类似这样的代码是否有必要封装成一个函数供多个地方调用 。
无限循环优先选用for(;;) , 而不是while(1)在C语言中 , 最常用的无限循环语句主要有两种:while(1)和for(;;) 。从功能上讲 , 这两种语句的效果完全一样 。那么 , 我们究竟该选择哪一种呢?
其实 , for(;;)语句运行速度要快一些 。按照for的 语法规则 , 两个分号;分开的是3个表达式 。现在表达式为空 , 很自然地被编译成无条件的跳转(即无条件循环 , 不用判断条件) 。如代码for(;;)在Microsoft Visual Studio 2010 集成开发环境VC++的Debug模式下将生成如下汇编代码:
for(;;)00931451jmpmain+41h(931451h)相比之下 , while语句就不一样了 。按照while的语法规则 , while()语句中必须有一个 表达式(这里是1 )判断条件 , 生成的代码用它进行条件跳转 。即while语句()属于有条件循环 , 有条件就要判断条件是否成立 , 所以其相对于for(;;)语句需要多几条指令 。如代码 while (1)在Microsoft Visual Studio 2010集成开发环境VC++的Debug模式下将生成如下汇 编代码:
while(1)011A1451moveax,1011A1456testeax,eax011A1458jemain+55h(11A1465h)011A1463jmpmain+41h(11A1451h)根据上面的分析结果 , 很显然 , for(;;)语句指令少 , 不占用寄存器 , 而且没有判断、 跳转指令 。当然 , 如果从实际的编译结果来看 , 两者的效果常常是一样的 , 因为大部分编译 器都会对while (1)语句做一定的优化 。
但是 , 这还需要取决于编译器 。因此 , 我们还是应该优先选用for(;;)语句 。
没有参数的函数必须用void填充在C语言中 , void的作用主要有两个:
1、对函数返回值的限定 。2、对函数参数的限定 。看一个示例函数:
intf(){return100;}从表面看 , 函数f()没有参数 , 也就是说 , 它不允许接受参数 。但事实并非如此 , 我们来验证一下:
#include<stdio.h>intf(){return100;}intmain(void){printf("%dn",f(666));return0;}编译、运行结果为:

文章插图
可见 , 使用GCC可正常通过编译 , 这说明可以向无参数的函数传递参数 。但是 , 需要注意的是 , 在一些IDE中不能通过编译 。
所以 , 为了提高程序的统一性、安全性与可读性 。我们对没有参数的函数必须使用void进行填充 。我们使用void填充上面的f函数之后 , 编译就不通过了 , 报错如下:

文章插图
尽可能为简单功能编写函数有时候 , 我们需要用函数去封装仅用一两行代码就可完成的功能 。对于这样的函数 , 单 从代码最上看 , 好像没有什么封装的必要 。但是 , 用函数可使其功能明确化、具体化 , 从而增加程序可读性 , 并且也方便代码的维护与测试 。示例代码如下:
推荐阅读
- 女性外出时,如何保持安全9个技巧
- 崂山绿茶价格,购买崂山绿茶的技巧
- 口红花养护技巧
- 淘宝论坛发帖置顶的七个技巧 淘宝怎么发帖子
- 小罐茶滇红的价格是多少,正山小种茶的冲泡技巧
- 淘宝直播间冲榜小技巧 淘宝直播权重排名靠前是怎么做到的
- 可乐姜汤,红茶的调饮及冲泡技巧
- 水疗会所装修设计技巧
- 超级推荐优化目标选哪个 超级推荐设置技巧
- 面对 MySQL 查询索引失效,程序员的六大优化技巧!
