这里的语法有点奇怪 , 但确实合法的 。循环中的第三条语句是可选的(无限循环可以写为for(;;)) 。如下代码拥有同样的效果:
for(i=10; i; i--){}或者更进一步的:
for(i=10; i!=0; i--){}这里我们需要记住的是循环必须终止于0(因此 , 如果在50到80之间循环 , 这不会起作用) , 并且循环计数器是递减的 。使用递增循环计数器的代码不享有这种优化 。
四、指针我们应该尽可能的使用引用值的方式传递结构数据 , 也就是说使用指针 , 否则传递的数据会被拷贝到栈中 , 从而降低程序的性能 。
函数通过参数接受结构数据的指针 , 如果我们确定不改变数据的值 , 我们需要将指针指向的内容定义为常量 。例如:
void print_data_of_a_structure ( const Thestruct*data_pointer){...printf contents of the structure...}这个示例告诉编译器函数不会改变外部参数的值(使用const修饰) , 并且不用在每次访问时都进行读取 。
同时 , 确保编译器限制任何对只读结构的修改操作从而给予结构数据额外的保护 。
五、懒检测开发在if(a>10 && b=4)这样的语句中 , 确保AND表达式的第一部分最可能较快的给出结果(或者最早、最快计算) , 这样第二部分便有可能不需要执行 。
六、用switch()函数替代if…else…对于涉及if…else…else…这样的多条件判断 , 例如:
if( val == 1)dostuff1();elseif (val == 2)dostuff2();elseif (val == 3)dostuff3();使用switch可能更快:
switch( val ){case1: dostuff1(); break;case2: dostuff2(); break;case3: dostuff3(); break;}在if()语句中 , 如果最后一条语句命中 , 之前的条件都需要被测试执行一次 。switch允许我们不做额外的测试 。如果必须使用if…else…语句 , 将最可能执行的放在最前面 。
函数相关1、参数的书写要完整参数的书写要完整 , 不要贪图省事只写参数的类型而省略参数名字 。如果函数没有参数 , 则用void填充 。例如:
voidSetValue(intwidth,intheight); // 良好的风格voidSetValue(int,int);// 不良的风格floatGetValue(void); // 良好的风格floatGetValue();// 不良的风格2、参数命名要恰当 , 顺序要合理例如编写字符串拷贝函数StringCopy , 它有两个参数 。如果把参数名字起为str1和str2 , 例如:
void StringCopy(char*str1,char*str2);那么我们很难搞清楚究竟是把str1拷贝到str2中 , 还是刚好倒过来 。
可以把参数名字起得更有意义 , 如叫strSource和strDestination 。这样从名字上就可以看出应该把strSource拷贝到strDestination 。
还有一个问题 , 这两个参数那一个该在前那一个该在后?参数的顺序要遵循程序员的习惯 。一般地 , 应将目的参数放在前面 , 源参数放在后面:
void StringCopy(char*strDestination,char*strSource);3、参数是指针如果参数是指针 , 且仅作输入用 , 则应在类型前加const , 以防止该指针在函数体内被意外修改 。
例如:
void StringCopy(char*strDestination , constchar*strSource);4、不要省略返回值的类型C语言中 , 凡不加类型说明的函数 , 一律自动按整型处理 。这样做不会有什么好处 , 却容易被误解为void类型 。
5、函数名字与返回值类型在语义上不可冲突违反这条规则的典型代表是C标准库函数getchar 。例如:
charc;c=getchar();if(c==EOF)…按照getchar名字的意思 , 将变量c声明为char类型是很自然的事情 。但不幸的是getchar的确不是char类型 , 而是int类型 , 其原型如下:
int getchar(void);由于c是char类型 , 取值范围是[-128 , 127] , 如果宏EOF的值在char的取值范围之外 , 那么if语句将总是失败 , 这种“危险”人们一般哪里料得到!导致本例错误的责任并不在用户 , 是函数getchar误导了使用者 。
6、不要将正常值和错误标志混在一起返回正常值用输出参数获得 , 而错误标志用return语句返回 。
回顾上例 , C标准库函数的设计者为什么要将getchar声明为令人迷糊的int类型呢?
推荐阅读
- 女性外出时,如何保持安全9个技巧
- 崂山绿茶价格,购买崂山绿茶的技巧
- 口红花养护技巧
- 淘宝论坛发帖置顶的七个技巧 淘宝怎么发帖子
- 小罐茶滇红的价格是多少,正山小种茶的冲泡技巧
- 淘宝直播间冲榜小技巧 淘宝直播权重排名靠前是怎么做到的
- 可乐姜汤,红茶的调饮及冲泡技巧
- 水疗会所装修设计技巧
- 超级推荐优化目标选哪个 超级推荐设置技巧
- 面对 MySQL 查询索引失效,程序员的六大优化技巧!
