说到C语言的语句块,真是一堆血泪史。
第一大坑就是优先级。
刚工作那会儿,C的书没看几本,自信满满的认为C语言都会了,拿出搞ACM培养的豪情壮志,
代码倒是写得爽,却到处留坑。回过头来看,工程经验积累很重要。
什么是经验?经验就是对自己思维盲区的总结,对不良代码习惯的反思。
第一条: 不要相信自己的记忆,两个操作符的优先级请用()区分开。
比如: x = y >> 3 + 2; 一定要写成 x= (y >> 3) + 2;
x= *p++; 最好写成 x = *p; p++; // 需要照顾刚毕业的。尽量不要你为难我,我为难你。
多年的经验表明,多敲几个()的几秒钟,会节省几小时,甚至几周。
第二条: 条件语句中不能有=号。
虽然 while (x = 5, x > 0) 写起来很牛,看起来的人就很累了。
更有 while (x = 1)导致的死循环。
第三条: 有符号无符号坚决不混用,实在要混用,优先转有符号数。
第四条: switch的case 一定要加break; 不加的话,一定要加注释特别声明。
第五条: 坚决不要硬编码,字符串与常量一定要定义为const 变量或宏。
项目代码里面一大堆276,328的东西,会让后来人杀人的心都有了。
第六条:复杂类型一定用typedef依层次定义。
比如:
int* (*p)(int* (*pF)(int , char*), int *, char);
让人很难受。
改成下面则好理解得多。
typedef int* (*FUNC1_P)(int , char*);
typedef int* (*FUNC2_P)(FUNC1_P pF, int *, char);
第七条: 使用函数指针一定要加()。
加()会让别人更能理解这是一个函数调用。
第八条:函数长度尽量不要超过500行。(当然,为了性能优化,特意循环展开的,请加注释说明。)
第九条: 变量命名风格一致,语句尽量简单。
第十条: 变量使用前务必初始化,特别是循环控制变量,动态分配内存。
第十一条: 每遇到一个坑,请覆盖这条,继续添加。
经验就是由坑堆出来的,无数的坑,才能让我们写出,简洁而优雅的C代码。