C语言开发建议

C语言开发建议

慎用goto语句

关于goto语句的争议已经不是一天两天了,大部分C语言老师在讲到goto这关键字的时候一般都会叫大家慎用goto关键字。既然goto语句C语言标准中定义了,那为什么不建议使用呢?

因为goto语句不仅让代码的可读性很差,随意的跳出还会给程序带来安全隐患。但正是这种几乎被各大公司明令禁止使用的语句,在Linux内核中却被大量使用着。

图片[1]-C语言开发建议-昕某人の博客

这只能说明一点,那就是因为我们水平太菜了,怕因为你的一句goto造成代码莫名跑飞!

早期的程序员用goto来解决代码无法预料的后果,遇到什么问题就用一句goto,让程序跳转到某个指定语句。

但是如果你的水平不够,不能完全理解整个代码的执行过程的话,贸然使用goto就可以出现莫名的问题,并且程序还很难被查到!

不建议使用goto语句的原因还有以下几点原因:

  1. goto语句可以被结构化程序的别的语句代替;
  2. goto语句会导致程序可读性下降,因为在实际程序中,goto可以跳到任何地方,可以往前可以往后,看程序慢慢看,看到goto然后又要去找标识符到底跳到了哪里,可读性严重下降,让读程序的人很不舒服;
  3. 调试不舒服,调试程序时,由于有goto乱跳的,这就很难调试,去掉嘛,要重新写代码,不去掉,无从下手;

存在即合理,goto语句也不例外,goto它存在,确实在某些程序中使用可能有好处,但在我们学习的阶段,应该尽量不要碰这类程序,养成一个好的编程习惯。记住一句话:别人写的goto我能看懂,但是我自己不会去写goto!

慎用extern关键字

在C语言程序中,我们用extern关键字对某个变量作 “外部变量申明” ,表示该变量是一个已经定义的外部变量,编译器就会自动地在所有源文件里面查找该变量的定义。

但是在某些标准的编程规范中有明确要求:不允许在C文件中使用 “extern” 来申明外部函数或全局变量。

具体原因如下(其中一点原因):

  1. 这样使用extern来定义全局变量确实能给我们带来了很大的便利,从而节省了我们很多的时间和精力。但是这样做也会存在一些危险,比如我们在c3.c文件引用的在a1.c文件的funca函数原型由UINT funca(UINT uiValue)变为UINT funca (UINT uiValue1, UINT uiValue2)我们在编译的时候不会报错,但是在我们执行程序的时候会在使用该函数的时候存在危险,尤其是该函数若有一个参数为指针,极有可能会存在对指针的误操作,而引起异常。
  2. 嵌入式特别是单片机的程序,最易犯的错误是全局变量满天飞。此现象在早期汇编转型过来的程序员以及初学者中常见,甚至有人把全局变量当作函数形参来用。
  3. 滥用全局变量会造成不必要的常量频繁使用,特别当这个常量没有用宏定义“正名”时,代码阅读起来将万分吃力
  4. 会导致软件分层的不合理,全局变量相当于一条快捷通道,它容易使程序员模糊了“设备层”和“应用层”之间的边界。写出来的底层程序容易自作多情地关注起上层的应用。这在软件系统的构建初期的确效率很高,功能调试进度一日千里,但到了后期往往bug一堆,处处“补丁”,雷区遍布。
  5. 由于软件的分层不合理,到了后期维护,哪怕仅是增加修改删除小功能,往往要从上到下掘地三尺地修改,涉及大多数模块,而原有的代码注释却忘了更新修改,这个时候,交给后来维护者的系统会越来越像一个“泥潭”,注释的唯一作用只是使泥潭上方再加一些乌烟瘴气。
  6. 全局变量大量使用,少不了有些变量流连忘返于中断与主回圈程序之间。这个时候如果处理不当,系统的bug就是随机出现的,无规律的,这时候初步显示出病入膏肓的特征来了。

慎用指针

指针对于初学者来说本来就是一个不易理解的东西,初学者一般都不能够真正的理解指针,并且正确的使用指针,下面是初学者常犯的错误:

空指针: 指针值为NULL的指针叫空指针,不能运行解引用,一旦解引用空指针就会产生段错误。

NULL在大多数系统的值为0,该地址储存操作系统重启的数据。

NULL也被当作错误标志,如果函数的返回值是指针类型,当它的值是NULL时说明执行出现错误。

如何避免空指针产生的段错误:对来历不明的指针进行解引用前要先判断是否为空

野指针: 指针变量的值是不确定的,随机的,未知的,这种指针被称为野指针。

对野指针进行解引用的后果:一切正常 (运气好)、段错误 (大概率)、脏数据 (堆内存申请的越多,脏数据可能性越大)。

慎用动态内存申请

动态内存的申请,可能导致的最严重的后果就是——忘记free。由此引发的问题,客观情况下可能你的程序立马返回错误,不乐观的情况下,可能要等程序运行上一段时间以后才会暴露问题,这个时间短则几十秒,长则几年之久。可以想象,这样的问题是多么难以定位,你的程序运行了1年后突然出现了问题!!问题是,你没办法再等一年看看。

文章版权声明 1、本网站名称:昕某人の博客
2、本站永久网址:https://xinmouren.cn
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。

THE END
喜欢就支持一下吧
点赞16 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片