zoukankan      html  css  js  c++  java
  • 编程事项

    一、数据类型

            数据类型是给变量、函数做限定,以决定存储何种数据及返回何种数据

           #1 基本数据类型定义的变量、函数,因不赋予特定含义不易阅读,对于移植及他人阅读或日后阅读带来诸多不变,所以为了可读性需要将定义的变量、函数赋予特定的含义,当然这种特定类型带来的弊端就是,找到其原始数据类型有点麻烦,见到一个变量你不可能立刻就知道它属于何种基本数据类型,但这并不妨碍其优势的发挥,特定含义除了变量、函数的命名,定义变量、函数的类型也得有特定含义,特定含义类型的获得方式 ,比如需要一个时间类型: 

      > typedef  int     timetype

      #2 新建数据类型包括结构体、联合体等,命名采用 对象_属性_类型,如 GPS_data_s(结构体),GPS_package_s(结构体),GPS_package_u(联合体),建议同一对象的结构体和联合体除尾缀命名相同

      新类型定义的变量建议格式:

      > 作为函数参数(形参) func(GPS_package_s sGPS_package_obj)、func(GPS_package_u uGPS_package_obj)

      > 作为普通变量则无要求,只要求具有特定含义即可

      成员变量建议的格式如下:

      > string_string  这种方式采用小写(特定词汇除外,如 GPS、CRC)

      > stringstring  stringstring_string  string_stringstring  这种方式采用首字母大写(特定词汇除外,如 msg_ID、msg_CRC)

     1 /* Define the GPS structure ---------------------------------------------------------------------*/
     2 typedef struct
     3 {
     4     uint32_t alarm_flag;        /* 报警标志 */
     5     uint32_t status;            /* 状态 */
     6     uint32_t latitude;          /* 维度 */
     7     uint32_t longitude;         /* 经度 */
     8     uint16_t elevation;         /* 海拔 */
     9     uint16_t speed;             /* 速度 */
    10     uint16_t direction;         /* 方向 */
    11     uint8_t GMT8[6];            /* GMT+8 YY-MM-DD-hh-mm-ss */
    12 }GPS_data_s;
    13 
    14 typedef struct
    15 {
    16     uint8_t msg_head;           /* 消息标识头 */
    17     uint16_t msg_ID;            /* 消息 ID */
    18     uint16_t msg_prop;          /* 消息体属性 */
    19     uint8_t term_phone[6];      /* 终端手机号 */
    20     uint16_t msg_SwiftNum;      /* 消息流水号 */
    21     GPS_data_s message;         /* 消息体 */
    22     uint8_t msg_CRC;            /* 校验码 */
    23     uint8_t msg_tail;           /* 消息标识尾 */
    24 }GPS_package_s;
    25 
    26 /* Define single union control bytes output */
    27 typedef union
    28 {
    29     GPS_package_s sGPS_obj;
    30     uint8_t GPS_byte[sizeof(GPS_package_s)];
    31 }GPS_package_u;

    二、函数

      #1 函数命名

      命名应做到表达清晰、无歧义,避免与常见名重复,最好能做到见名知意,建议格式:模块名_操作对象_目的,为全部小写以下划线连接,除非特定词汇像GPS(模块)、BCD(编码格式)等

      举例六轴模块MPU6050函数定义:

      > mpu6050_hard_init()    此函数作用是初始化与MCU相连接的管脚、使用资源(SPI、IIC、USART等)相关的配置

      > mpu6050_device_init()   此函数作用是初始化模块自身相关寄存器的配置

      建议驱动文件内部使用函数一致使用限定符 static

      > static mpu6050_register_write()

      > static mpu6050_register_read()

       

      建议供外部文件使用的函数一致使用 bsp_模块名_(操作对象)_目的,括号部分可省,模块名通常就是所在文件名,供外部使用的函数或变量最好能体现其来源,即看到该函数和变量时就能知道它是在哪个文件中定义的

      > bsp_mpu6050_init()     此函数作用是供系统初始化使用

      > bsp_mpu6050_write()

      > bsp_mpu6050_read()

      

      #2 函数参数

      函数的参数定义的建议格式:

      >   _参数名(一个单词的情况,参数名要小写)

      >  前缀参数名 (前缀通常为类型,参数首字母大写)

      >  参数名(多个单词的情况,参数名中各单词间直接相接,各单词首字母大写,建议两个单词即可)

      示例

      > void dec_to_BCD(uint64_t _dec, uint8_t* _buf, uint8_t _num)

      > void dec_to_BCD(uint64_t ullDec, uint8_t* ucBuf, uint8_t ucNum)

      > uint16_t escape_process(uint8_t *SrcBuf, uint8_t *DesBuf, uint16_t _num)

      

  • 相关阅读:
    BZOJ2563 阿狸和桃子的游戏
    BZOJ2460 Beijing2011元素(线性基+贪心)
    BZOJ2458 Beijing2011最小三角形(分治)
    BZOJ2442 Usaco2011 Open修剪草坪(动态规划+单调队列)
    Luogu2257 YY的GCD/BZOJ2818 Gcd加强版(莫比乌斯反演+线性筛)
    BZOJ2428 HAOI2006均分数据(模拟退火)
    BZOJ2440 中山市选2011完全平方数(容斥原理+莫比乌斯函数)
    洛谷 P1783 海滩防御 解题报告
    洛谷 P2431 正妹吃月饼 解题报告
    洛谷 P2751 [USACO4.2]工序安排Job Processing 解题报告
  • 原文地址:https://www.cnblogs.com/skullboyer/p/8109480.html
Copyright © 2011-2022 走看看