zoukankan      html  css  js  c++  java
  • C编程规范, 演示样例代码。

    /***************************************************************
    *Copyright (c) 2014,TianYuan
    *All rights reserved.
    *
    *文件名: standard.h
    *文件标识: 编程规范演示样例代码
    *
    *当前版本号:V1.0
    *作者:wuyq 
    *完毕日期:20140709
    *
    *改动记录1:   //改动历史记录。包含改动日期、版本号号、改动人及改动内容等
    *改动日期        版本号号              改动人         改动内容
    * --------------------------------------------------------------------------------------------------
    * 20140709         V1.0                wuyq            创建
    ******************************************************************/
    
    #ifndef _STANDARD_H__
    #define _STANDARD_H__
    
    /*重定义一些基本数据类型*/
    typedef char                s8;
    typedef unsigned char       u8;
    typedef signed short        s16;
    typedef unsigned short      u16;
    typedef int                 s32;
    typedef unsigned int	    u32;
    typedef float               f32;
    typedef signed long long    s64;
    typedef unsigned long long  u64;
    typedef enum {FALSE =0, TRUE =!FALSE} bool;  
    typedef bool BOOL;
    
    /* 消息头 */
    typedef struct {
        u16     u16MsgType;         /* 消息类型*/
        u16     u16MsgLength;       /*有效消息数据长度*/
        u8      u8TransType;		/*传输通道0:网络 1:串口*/
        u8      u8Reserved[3];		/*对齐*/
    }STRU_MSG_HEAD;
    
    /* 时间信息*/
    typedef struct {
        u16     u16Year;	/*年*/
        u16     u16Month;	/*月*/
        u8      u8Day;		/*日*/
        u8      u8Hour;		/*时*/
        u8      u8Minute;	/*分*/
        u8      u8Second;	/*秒*/
    }STRU_TIME_INFO;
    
    /* MCM->Main 查询系统信息*/
    struct  stru_machine_info_req {
        STRU_MSG_HEAD   struMsgHeader;/*消息头*/
    };
    
    /* Main->MCM 反馈系统信息*/
    struct stru_machine_info_rsp {
        STRU_MSG_HEAD   struMsgHeader;/*消息头*/
        f32             f32Temp;/*当前採样温度*/
        f32             f32Vol;/*当前採样电压*/
        f32             f32CpuFreq;/*Cpu频率*/
        u32             u32FreeMem;/*剩余内存*/
        u32             u32FreeDisk;/*剩余FLASH空间*/
    };
    /* Main向MCM返回软件升级结果 */
    struct stru_software_update_rsp {
        STRU_MSG_HEAD   struMsgHeader;
        u8              b8Successful;/*是否升级成功*/
        u8              u8Reserved[3];/*字对齐,保留*/
    };
    
    //函数头部的可採用例如以下的样式
    /**********************************************************************
     *功能描写叙述:
     *输入參数:
     *输出參数:
     *返回值:
     *其他说明:
     *改动记录1:   //改动历史记录,包含改动日期、版本号号、改动人及改动内容等
     *改动日期        版本号号              改动人         改动内容
     * --------------------------------------------------------------------------------------------------
     * 20140709         V1.0                wuyq            创建
     ***********************************************************************/
    
    #endif
    


    
    
    /**********************************************************************
    *Copyright (c) 2014,TianYuan
    *All rights reserved.
    *
    * 文件名: UnitTest.c
    * 文件标识:无
    * 内容摘要:协议及单元測试演示样例代码
    * 其他说明:无
    * 当前版本号: V1.0
    * 作    者: wuyq
    * 完毕日期: 20140709
    *
    *改动记录1:   //改动历史记录,包括改动日期、版本号号、改动人及改动内容等
    *改动日期        版本号号              改动人         改动内容
    * --------------------------------------------------------------------------------------------------
    * 20140709         V1.0                wuyq            创建
    **********************************************************************/
    #include <stdio.h>
    #include <string.h>
     
    // 重定义数据类型
    typedef unsigned char       UINT8;
    typedef unsigned short int    UINT16;
    typedef unsigned int        UINT32;
    typedef signed   int        INT32;
     
    // 消息头结构
    typedef struct
    {
        UINT16  iReserve1;
        UINT16  iReserve2;
        UINT16  iReserve3;
        UINT16  iReserve4;
    }MsgHead_T;
     
    // 消息结构体(包括消息头和消息体)
    typedef struct
    {
        MsgHead_T   MsgHead;                // 消息头
        UINT32      iOperType;      // 操作类型, 操作类型仅仅能为1或2
        UINT8       szUserNumber[30];         // 用户号码
        UINT8       szOperTime[20];      // 操作时间, 格式为: yyyymmdd
        UINT32       iReserve1;                // 保留字段1
        UINT8        szReserve2[50];           // 保留字段2
    }UserReqMsg_T;
     
    // 函数声明
    INT32 ProcUserReqMsg(UserReqMsg_T *ptUserReqMsg);
    INT32 main();
     
    /**********************************************************************
    * 功能描写叙述:主函数
    * 输入參数:无
    * 输出參数:无
    * 返回值: 0-运行完毕
    * 其他说明:无
    * 改动日期        版本号号              改动人         改动内容
    * --------------------------------------------------------------------------------------------------
    * 20140507         V1.0                zzx            创建
    ***********************************************************************/
    INT32 main()
    {
        UINT8  iRetVal          = 0;
        UINT32 iOperType        = 0;        // 操作类型
        UINT8  szUserNumber[30] = {0};      // 用户号码
        UINT8  szOperTime[10]  = {0};    // 操作时间, 格式为: yyyymmdd
     
        UserReqMsg_T tUserReqMsg = {0};     // 请求消息
     
        // 对消息头部进行赋值
        tUserReqMsg.MsgHead.iReserve1 = 1;
        tUserReqMsg.MsgHead.iReserve2 = 2;
        tUserReqMsg.MsgHead.iReserve3 = 3;
        tUserReqMsg.MsgHead.iReserve4 = 4;
     
        // 读入详细消息字段的值
        printf("操作类型: 
    ");
        scanf("%d", &iOperType);
        printf("用户号码: 
    ");
        scanf("%s", szUserNumber);
        printf("操作时间: 
    ");
        scanf("%s", szOperTime);
     
        // 对详细消息字段进行赋值(保留字段可不赋值)
        tUserReqMsg.iOperType = iOperType;
        strncpy(tUserReqMsg.szUserNumber, szUserNumber, strlen(szUserNumber));// 获取号码, 用strncpy取代strcpy
        strncpy(tUserReqMsg.szOperTime,   szOperTime,   strlen(szOperTime));     // 获取时间, 用strncpy取代strcpy
     
        // 对消息体的字段进行异常推断
        iRetVal = ProcUserReqMsg(&tUserReqMsg);  // 注意: 传递參数的时候要加上&
        if (iRetVal == 0)      // 函数运行正确
        {
            // 打印消息字段内容
            printf("The user request message is: iOperType=%d, szUserNumber=%s, szOperTime=%s.
    ", tUserReqMsg.iOperType, tUserReqMsg.szUserNumber, tUserReqMsg.szOperTime);
            return 0;
        }
        else         // 打印异常消息
        {
            printf("Some content of the user request message is wrong, please check!
    ");
            return -1;
        }
    }
     
     
    /**********************************************************************
    * 功能描写叙述:对消息体的字段进行异常推断
    * 输入參数: ptUserReqMsg-用户请求消息
    * 输出參数:无
    * 返回值: 0-成功   其他-失败
    * 其他说明:无
    * 改动日期        版本号号              改动人         改动内容
    * --------------------------------------------------------------------------------------------------
    * 20140507         V1.0                zzx            创建
    ***********************************************************************/
    INT32 ProcUserReqMsg(UserReqMsg_T *ptUserReqMsg)
    {
        INT32  iRetValue      = 0;
     
        // 对输入參数进行异常推断
        if (ptUserReqMsg == NULL)
        {
            printf("ProcUserReqMsg(...): input parameter(ptUserReqMsg) is NULL.
    "); 
            return -1;
        }
     
        // 对消息体字段进行异常推断
        if ((ptUserReqMsg->iOperType != 1) && (ptUserReqMsg->iOperType != 2))    // 操作类型仅仅能为1或2, 其他为数据异常
        {
            printf("ProcUserReqMsg(...): the iOperType is wrong, iOperType=%d.
    ", ptUserReqMsg->iOperType);
            return -2;
        }
       
        if (strlen(ptUserReqMsg->szUserNumber) != 8) // 用户号码异常, 长度8位才正确
        {
            printf("ProcUserReqMsg(...): the szUserNumber is wrong.
    "); 
            return -3;
        }
    	
        if (strlen(ptUserReqMsg->szOperTime) != 8)  // 操作时间异常, 长度8位才正确
        {
            printf("ProcUserReqMsg(...): the szOperTime is wrong.
    ");       
            return -4;
        }
     
        return 0;
    }

  • 相关阅读:
    nodejs初期,搭建一个登陆注册功能,(原生的)
    关于vue如何创建一个自定义组件(这是项目中经常得用的)
    关于vue 使用watch方法,详解。
    怎样用Nodejs搭建一个服务器
    关于Promise的理解及运用
    Ado.NET SQLHelper(2)
    Ado.NET SQLHelper
    MS SQLSERVER 自增ID列竟然会重复
    SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别
    thread.start和threadstart.invoke的区别
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5350833.html
Copyright © 2011-2022 走看看