掌握C语言的必知要点

发布时间:2016-2-26 14:29    发布者:designapp
关键词: C语言 , 可维护性
  温故而知新,可以为师矣,初学一门语言的时候,我们会跃跃欲试,并没有真正深入的理解,经过一段时间的实践,会产生困惑,学而不思则殆,这时回过头来看书,会有意想不到的收获,会豁然开朗,会让你在以后的实践中更加运用自如,下面再来看看一些C语言的知识要点及注意事项,一起来温习一下。
  1、 Switch
  先来看一个简单的实例
  Switch(cmd){
  Case 1:func1();break;
  Case 2:func2();
  Case 3:func3();break
  Default:func();break;
  }
  如果cmd==2,程序执行switch后,会直接转到case 2,执行func2();之后会继续进入case 3,执行func3();遇到break语句之后退出switch,因此如果你本意不想执行func3();一定要在func2();后面加上break。加上default是一个好习惯,default可以放在任何一个位置,后面也要加上break,即使放在最后也要加,以免以后加代码时忘记添加break导致意想不到的错误。
  2、 函数声明
  Char *func(char *,char *);
  Char *func(char *dst,char *src);
  这两个声明都是正确的,但是第二个在原型中加上了参数的名字,更容易让人看懂。
  3、 递归
  C语言通过运行时堆栈支持递归函数的实现,大体流程是这样,递归函数会调用函数本身,每进行一次调用,都将创建一批变量,而把前一次创建的变量压栈,当递归条件不满足时,开始将变量按顺序出栈,直到所有变量被弹出,要注意的是,除非你很有把握,而且确保使用递归函数可大大提高效率,否则不要轻易使用递归,这会使程序的可读性变差,还可能造成意想不到的冗余。
  4、 数组
  数组是相同类型的一组值的集合,int b[4],b[4]内部可存储4个int型数据,那么b的类型是什么?它表示的是整个数组吗?在C中,数组名的值是一个指针常量,指向数组第一个元素,而这个指针常量的类型取决于数组元素的类型,注意这个值是指针常量,而不是指针变量,它的值不能修改,因为如果你修改了这个常量的值,相当于将整个数组移动内存的其它位置,而且在程序运行时,移动数组的行为也是无效的。
  int a[4]; int *c; int b[4];
  C = &a[0];与c=a;执行的任务是一样的,就是把C指向数组的首个元素。
  而b=a;这是非法的,因为a与b均是指针常量,如果想把a的值全部赋给b,需要借助循环来实现。
  a=c;也是非法的,因为a的值也不应该被修改。
  5、 Const
  只要有可能,函数的指针形参都应该声明为const,
  Void strcpy(char *buffer, char const *string);
  这个函数的目的是把string的内容复制到buffer,形参string被声明为一个指向const字符的指针,这样做的好处有3个:
  (1) 读者不必看函数体就知道该数据不会被修改
  (2) 编译器可以捕获任何试图修改该数据的错误
  (3) 这类声明允许向函数传递const参数
  6、 Static
  数组和变量的初始化方式取决于它们的存储类型,存储于静态内存的数组或变量只初始化一次,当程序执行时,静态数组已经初始化完毕,对于自动变量而言,由于自动变量位于运行时堆栈中,执行流每次进入它们所在的代码块,变量所处的内存位置可能不同,如果自动变量的声明中给出了初始值,每次执行流进入变量所在的作用域,变量就被一条隐士的赋值语句初始化,如果是数组元素较多的情况,初始化时间也是比较可观的。
  因此,当数组初始化于一个函数中时,每次调用函数,都会对数组初始化,但若把数组声明为static,数组的初始化只需在程序开始前执行一次。
  7、 效率与可维护性
  编写代码不可一味的追求效率,不要写晦涩难懂的程序来彰显自己的语言功底,这只会让程序的可维护性变差,如果程序的改进换来的效率并不可观,就不要为了那几十微秒的时间而给后续维护人员带来困惑,它付出的代价是使得程序难于编写在前,难与维护在后,而程序维护是软件产品的主要成本所在,复杂的用法比简单的用法所涉及的风险要大得多。
                               
               
本文地址:https://www.eechina.com/thread-161332-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表