`
leili
  • 浏览: 181390 次
社区版块
存档分类
最新评论

编写出优秀C语言代码的秘诀

 
阅读更多

1、使用自加、自减指令

  通常使用自加、自减指令和复合赋值表达式(如a-=1及a+=1等)都能够生成高质量的程序代码,编译器通常都能够生成inc和dec之类的指令,而使用a=a+1或a=a-1之类的指令,有很多C编译器都会生成二到三个字节的指令。在AVR单片适用的ICCAVR、GCCAVR、IAR等C编译器以上几种书写方式生成的代码是一样的,也能够生成高质量的inc和dec之类的的代码。

  2、查表

  在程序中一般不进行非常复杂的运算,如浮点数的乘除及开方等,以及一些复杂的数学模型的插补运算,对这些即消耗时间又消费资源的运算,应尽量使用查表的方式,并且将数据表置于程序存储区。如果直接生成所需的表比较困难,也尽量在启了,减少了程序执行过程中重复计算的工作量。

  3、选择合适的算法和数据结构

  需要熟悉算法语言,知道各种算法的优缺点。将比较慢的顺序查找法用较快的二分查找或乱序查找法代替,插入排序或冒泡排序法用快速排序、合并排序或根排序代替,都可以大大提高程序执行的效率选择一种合适的数据结构也很重要,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。但是在Keil中则相反,使用数组比使用的指针生成的代码更短

  4、使用尽量小的数据类型

  能够使用字符型(char)定义的变量,就不要使用整型(int)变量来定义;能够使用整型变量定义的变量就不要用长整型(long int),能不使用浮点型(float)变量就不要使用浮点型变量。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值,C编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。

  5、减少运算的强度

  可以使用运算量小但功能相同的表达式替换原来复杂的的表达式。如下:

  (1)、求余运算。

  如:a=a%8;可以改为:a=a&7;

  说明:位操作只需一个指令周期即可完成,而大部分的C编译器的"%"运算均是调用子程序来完成,代码长、执行速度慢。通常,只要求是求2n方的余数,均可使用位操作的方法来代替。

  (2)、平方运算

  如:a=pow(a,2.0);可以改为:a=a*a;

  说明:在有内置硬件乘法器的单片机中(如51系列),乘法运算比求平方运算快得多,因为浮点数的求平方是通过调用子程序来实现的,在自带硬件乘法器的AVR 单片机中,如ATMega163中,乘法运算只需2个时钟周期就可以完成。既使是在没有内置硬件乘法器的AVR单片机中,乘法运算的子程序比平方运算的子程序代码短,执行速度快。

  如果是求3次方,如:a=pow(a,3.0);更改为:a=a*a*a;

  则效率的改善更明显。

  (3)、用移位实现乘除法运算

  如:a=a*4;b=b/4;可以改为:a=a《2;b=b》2;

  说明:通常如果需要乘以或除以2n,都可以用移位的方法代替。在ICCAVR中,如果乘以2n,都可以生成左移的代码,而乘以其它的整数或除以任何数,均调用乘除法子程序。用移位的方法得到代码比调用乘除法子程序生成的代码效率高。实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果,如:a=a*9可以改为:a=(a《3)+a

  6、循环

  (1)、循环语

  对于一些不需要循环变量参加运算的任务可以把它们放到循环外面,这里的任务包括表达式、函数的调用、指针运算、数组访问等,应该将没有必要执行多次的操作全部集合在一起,放到一个init的初始化程序中进行。

  (2)、延时函数:

  通常使用的延时函数均采用自加的形式:

  两个函数的延时效果相似,但几乎所有的C编译对后一种函数生成的代码均比前一种代码少1~3个字节,因为几乎所有的MCU均有为0转移的指令,采用后一种方式能够生成这类指令。在使用while循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成的代码更少1~3个字母。但是在循环中有通过循环变量"i"读写数组的指令时,使用预减循环时有可能使数组超界,要引起注意。

  (3)while循环和do…while循环

  用while循环时有以下两种循环形式:

  在这两种循环中,使用do…while循环编译后生成的代码的长度短于while循环。

  7、其它

  比如使用在线汇编及将字符串和一些常量保存在程序存储器中,均有利于优化。


分享到:
评论

相关推荐

    编程精粹MicroSoft编写优质无错C语言秘诀.rar

    《编程精粹:Microsoft编写优质无错C语言秘诀》是一本深入探讨C语言编程实践的著作,旨在帮助程序员提升代码质量,减少错误,提高程序的可靠性和效率。这本书结合了Microsoft开发团队的经验与智慧,提供了许多实用的...

    编程精粹───Microsoft编写优质无错C程序秘诀

    《编程精粹——Microsoft编写优质无错C程序秘诀》是一本深入探讨如何编写高质量、无错误C语言程序的专业书籍,作者Steve Maguire以其在Microsoft的工作经验为基础,分享了一系列实用的技术和理念,旨在帮助程序员...

    代码大全中文版和编程精粹Microsoft编写优质无错C程序秘诀

    接下来,《编程精粹:Microsoft编写优质无错C程序秘诀》专注于C语言的编程实践,特别关注消除错误和提高代码可靠性。书中涵盖的知识点包括: 1. **C语言特性**:深入解析C语言的关键特性,如指针操作、内存管理、预...

    C语言基础学习大全涵盖所有C语言C秘籍

    - **简洁紧凑**:C语言的核心库非常精简,共有32个关键字和9种控制语句,使得程序员可以非常灵活地编写代码。 - **使用方便**:C语言的语法结构相对简单,便于学习和使用。 - **Turbo C的扩展**:Turbo C版本增加...

    Microsoft编写优质无错C程序秘诀

    标题中提到的“Microsoft编写优质无错C程序秘诀”揭示了微软工程师在C语言编程中追求代码质量与无错编程的理念和技巧。C语言作为一种广泛使用的编程语言,其灵活性和高效性使其在系统编程和软件开发中占据着重要的...

    编程精粹---Microsoft编写优质无错C程序秘诀.zip

    在编程领域,编写优质无错的代码是每个程序员追求的目标,尤其在使用C语言时,由于其低级特性和对内存管理的直接控制,错误处理显得尤为重要。Microsoft提供了丰富的开发工具和技术来帮助开发者编写高质量的C程序。...

    编写优质无错的C程序的秘诀编程精粹

    最后,编写优质无错的C程序需要不断实践、阅读他人的代码、学习优秀的编程范例,并时刻保持对新技术的关注。只有通过不断的磨练,才能真正掌握C语言的精髓,写出高质量的代码。《编写优质无错的C程序的秘诀编程精粹...

    编程精粹─Microsoft编写优质无错C程序秘诀.rar

    总的来说,"编程精粹─Microsoft编写优质无错C程序秘诀"文档是一份全面的指南,涵盖了从基础到高级的C语言编程技巧,旨在帮助开发者提升编程技能,编写出更高质量、更少错误的C程序。无论是初学者还是经验丰富的...

    编程精粹 - Microsoft编写优质无错C程序秘诀

    本文将深入探讨“编程精粹 - Microsoft编写优质无错C程序秘诀”,揭示那些能够让代码更加健壮、可维护且高效的实践方法。 1. **规范编码风格**:Microsoft推崇清晰、一致的编码风格,这包括命名规则、注释规范以及...

    微软C语言 编程精粹

    《微软C语言编程精粹》一书,由Steve Maguire撰写,深入探讨了微软内部用于开发高质量、无错误C程序的秘诀和技术。本书不仅提供了理论上的指导,还通过实际案例和编程实践,展现了如何避免常见的编程陷阱,以及如何...

    编程精粹 - Microsoft编写优质无错C程序秘诀.zip

    "编程精粹 - Microsoft编写优质无错C程序秘诀"这个资源正是对这些宝贵经验的总结,旨在帮助开发者提升代码质量,减少错误,提高程序的可靠性和效率。 一、C语言基础知识 C语言是一种结构化编程语言,它的核心在于...

    编写无错的C程序秘诀

    以下是一些关于如何编写无错C程序的重要知识点,这些技巧和注意事项将帮助你提升代码质量并减少错误。 1. **理解基本数据类型**:了解`int`, `char`, `float`, `double`等基本数据类型的存储大小和范围是避免类型...

    Microsoft编写优质无错C程序秘诀(free)

    本资料“Microsoft编写优质无错C程序秘诀”旨在分享微软在C编程中的经验和技巧,帮助开发者提升代码质量,避免重复错误。 一、理解C语言基础 1. 数据类型:深入理解各种基本数据类型(如int、char、float等)以及...

    《C编程精粹》 微软编写优质无错C程序秘诀

    《C编程精粹:微软编写优质无错C程序秘诀》是一本不可多得的C语言编程指南。它不仅适合初学者了解C语言的基础知识和编程技巧,也非常适合有经验的开发者进一步提升自己的技能。通过学习本书中的内容,读者不仅可以...

Global site tag (gtag.js) - Google Analytics