五个好的C语言编程实践.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
五个好的C语言编程实践.doc

前几天,我看到一个关于编程语言的调查,我发现到目前为止,C 编程语言在全球开发者中仍然稳居前三。如此多的代码使用C来编写,我想分享我多年学习总结的一些好的C语言编程实践。 ? 不要使用gets()和strcpy() 再也不要使用诸如gets()、strcpy()、sprintf()等等这些函数,这已经是一个广为人知的一个事实,但这些函数仍然在库中,以用来支持那些已经使用这些函数的代码。如果你使用man手册关于gets()的说明,会发现: Never use gets(). Because it is impossible to tell without knowing the data in advance how many characters gets() will read, and because gets() will continue to store characters past the end of the buffer, it is extremely dangerous to use. It has been used to break computer security. Use fgets() instead. 当你使用这些函数时,甚至一些编译器如gcc 都会给你警告,gcc 给出类似下面的警告: warning: the `gets’ function is dangerous and should not be used. 足见整个开发环境已经意识到这个问题,所以我们应该重视起来,使用像fgets()、strncpy()、snprinf()等这些函数,它们更好地根据缓冲区的大小来控制输入。 ? 函数只能有一个返回点 在一个函数中随意地使用return语句,这是一个很不好的编程习惯,函数有多个返回点会增加代码管理的复杂度。通常一个代码由多个开发者完成就可以出现这个问题,但即使如此,任何人在开发的过程中都会造成这个问题。记住仅有一个返回点是好的编程习惯。 举例来说: #includestdio.h ... ... ? int main(void) { ??? ... ??? ... ??? ... ??? if(/*some condition*/) ??????? return 1;???? // Not a good programming practice ??? else if(/*some condition*/) ??????? return 2;???? // Not a good programming practice ??? else ??????? return -1;??? // Not a good programming practice } 更好的代码应该这样写: #includestdio.h ... ... ? int main(void) { ??? int ret = 0; ??? ... ??? ... ??? ... ??? if(/*some condition*/) ??????? ret = 1;? ??? else if(/*some condition*/) ??????? ret = 2;??? ??? else ??????? ret = -1; ? ??? return ret; } ? 在适当的地方进行基本的优化 有时当我们写一个逻辑时,我们会忽略事情是如何通过这个逻辑完成的。我的意思是,我们应该在适当的地方进行一些基本的优化。 看下面的一段代码: ... ... int len = 0; char *buff = Linux; ? while(/*Some condition*/) { ? ??? ... ??? ... // updating len here ??? ... ??? if(len strlen(buff)) ??? { ??????? //Do some stuff here ??? } ??? ... ??? ... ??? ... } ... ... ... 看看上面的代码,函数strlen()在循环中一次又一次地计算buff指向的字符串的长度,这是没经过优化的代码,因为buff指向的缓冲区在 while循环中始终没有改变,因此长度也不会改变。更好的做法是,在while循环之前调用一次strlen()函数,用一个变量来保存buff的长 度,在循环中使用这个变量就可以了。像下面这种做法: ... ... ... int len = 0; int buff_len = 0; ? char *buff = Linux; buff_len = strlen(buff); ? while(/*Som

文档评论(0)

xinshengwencai + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:5311233133000002

1亿VIP精品文档

相关文档