zoukankan      html  css  js  c++  java
  • code complete part2

    基本数据类型:

    1. 程序主体中仅能出现的数字就是0和1,除此之外,所有的数字都要用宏定义或者const类型,用清晰的变量名描述用途

    2. 预防除零错误, assert(denominator!=0)或者其他

    3. 显式进行类型转换

    4.避免不同类型间比较

    5.注意编译器警告

    对于整数,需要注意:整数除法(去尾法),检查整数溢出,检查中间结果溢出

    对于浮点数,需要注意:避免==的判断,需要加一个阈值,例如

    for(i=0;i<10;i++)

    a + = 0.1;

    if(a==1.0)

     因为最后的结果一定不会刚好等于1, 0.1在内存中二进制表示为0.000110011......

    对于字符串,避免off-by-one错误,以及unicode,还有区分字符串和字符数组,malloc和calloc(包含了分配和初始化),用strcpy_s以及strncpy,不用strcpy

    对于bool,用布尔变量来简化if的判断,一般写if(A&&B||C)可以直接写作 bool bskip = A&&B||C, if(bskip)....

    对于枚举类型,把第一个留给非法值,因为大多数没有赋值的时候,就是0,这样可以及早的检测出问题

    对于数组,如果操作比较复杂,不要用i,j来表示下标,因为比较容易弄混。。。

    建立自己的类型,typedef float coordinate,这样可以起到封装的效果,并且一看就知道这个变量是用于存储坐标的;不过要记住不要重定义一个变量的类型

    对于指针,可以用dog tag来监视这一段内存有没有被写坏。分配的时候多分配一些,在内存空间的前一段作为dog tag

    组织直线型代码

    如果有些函数要在另一些之前call到,请在函数名中清楚的表明这一点,init....之类的

    使用条件语句

    if...else 先判断那些正常的路径,再在else中处理那些不常见的代码

    如果写了if,那么也要写else,要考虑如果出现了else怎么办

    利用bool变量简化判断

    对于case语句,把最常执行的放在顶端,用default来检查错误,打印错误信息

    使用循环

    任何时候都要在循环体加{},方便代码改动

    循环的一些++操作,在循环体的最前面或者最后面进行

    循环计数器应该是整形的

    循环体不超过50行

    嵌套小于3层

    长循环挪到子函数中

  • 相关阅读:
    TCP连接之报文首部
    Django基础篇--用户权限管理和组管理
    MySQL聚簇索引
    浅谈Redis之慢查询日志
    Django基础篇--模板和路由分发
    Django--数据库查询操作
    Django基础篇--Models
    Sqlautocode使用过程的一些坑
    关于域名的一点事
    unicode编码和utf8编码的区别
  • 原文地址:https://www.cnblogs.com/sunny-li/p/5427463.html
Copyright © 2011-2022 走看看