EDA365电子论坛网

标题: C语言编程技巧总结 [打印本页]

作者: wzs6668    时间: 2016-5-30 17:23
标题: C语言编程技巧总结
在日常编程中,可能实现的功能都是一样的,但是别人就是要写的快,写的好,而且同样代码执行效率还高。究其原因,就是别人编写的代码多,掌握了更多的技巧性的东西,从而无论从编码效率还是代码的执行效率上都更优。现将日常编程中使用到的一些常规技巧进行简单总结。8 \9 j8 J; y) U% @* M6 M+ T
1、从循环开始
3 D) f& D+ v& n4 R7 R* @( ]' [6 `; q1)while(--n>=0)与while(n-->0)9 |! y7 B4 {" y, B' N) q/ ?
在大多数C语言实现中,--n >=0 至少与等效的n-- >0 一样快,大多数情况下前者更快。
1 C( Y" G+ K4 P* s; G# e主要因为第一个表达式首先从n中减去1然后将结果与0比较;而第二个表达式首先保存n,从n中减去1之后比较保存值与0的大小,这中间多了一个保存的时间,从而前一个表达式更快。4 J* Y  b6 ^9 ^, H0 R3 b$ ?
注意:这样的循环中,尽量不使用unsigned类型,否则前者会出现无限循环情况。
: v" w9 M* m' Y, f4 Z, z& C2 A7 `8 g! B' _2)多重循环处理) X. f% Y6 @( v2 |# P0 D
对于多重循环,如果可能,应将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。
/ [. i& n- U$ X" ]7 B5 I2 S3)for循环
( Y( t1 Y5 a! f. N- `对于for语句的循环控制变量的取值采用“半开半闭区间”写法,用此方法更加直观。2 @3 y5 x' w" E6 x( c% W
不能在for循环体内修改循环变量,防止循环失控。" A1 L7 y" l$ }0 y; [- ^! e
循环要尽可能的短,使代码显得清晰。若太长,看是否真的必须放入循环中,若必须,可以将这些代码封装成一个子函数,循环中只需调用子函数即可。
$ R; u6 n% o/ T! Y6 _: z2 U* T) H同时,把循环嵌套控制在3层以内。
5 E" X- t# z1 a2、函数参数
" Y. q! Y7 A" A3 Y' e在设计函数时,通常将目的参数放在前面,源参数放在后面。若可能,通过IN、OUT这样的宏定义来标注参数输入输出。, t) _( s/ I- f4 D+ o2 u* b3 Z
如果参数是指针,且仅作输入用,则应在类型前加const,以防止该指针在函数体内被意外修改。
$ ~% V8 j/ s. z3、函数中内存处理
, N7 ^6 B# T) B# R1 g1)在函数中分配的内存,在函数退出之前要释放
# {: H' x/ ~; S5 D' K0 W6 G0 Q2)return语句不可返回指向“栈内存”的指针或者引用,因为该内存在函数体结束时被自动销毁。
  F4 |* Y7 k  k1 K2 l* |  S- z; ^, j# G4、时间效率提升* W9 `4 p0 {5 ]% b! K
1)调用if语句时,优先处理正常情况,再处理异常情况。
" ~( n4 h3 l/ l9 W9 K/ @9 m1 Z首先,可以使得正常情况的执行代码清晰,那些不常发生的异常情况不会遮掩了正常的执行路径。$ i  [7 A9 f. |$ t( M& u
其次,由于每进行一次if语句必然会有比较过程存在,而正常情况应该是发生的比较多的情况,那么可以减少在使用过程中比较的调用。设计时一定不要颠倒主次。' {% s. p# f6 x3 Q
2)使用switch,case时,也要注意case的顺序,尤其是比较多种类的情况下,发生概率高的放在前面,低的放在后面,可以有效的减少不必要的比较过程。若没有重要性区分,按照字母排列顺序或数字大小排列也可。
作者: hasky    时间: 2016-5-31 15:08





欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2