您的位置:首页 > 编程语言

C编程规范, 演示样例代码。

2016-04-03 21:37 411 查看
/***************************************************************
*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("操作类型: \n");
scanf("%d", &iOperType);
printf("用户号码: \n");
scanf("%s", szUserNumber);
printf("操作时间: \n");
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.\n", tUserReqMsg.iOperType, tUserReqMsg.szUserNumber, tUserReqMsg.szOperTime);
return 0;
}
else         // 打印异常消息
{
printf("Some content of the user request message is wrong, please check!\n");
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.\n");
return -1;
}

// 对消息体字段进行异常推断
if ((ptUserReqMsg->iOperType != 1) && (ptUserReqMsg->iOperType != 2))    // 操作类型仅仅能为1或2, 其他为数据异常
{
printf("ProcUserReqMsg(...): the iOperType is wrong, iOperType=%d.\n", ptUserReqMsg->iOperType);
return -2;
}

if (strlen(ptUserReqMsg->szUserNumber) != 8) // 用户号码异常, 长度8位才正确
{
printf("ProcUserReqMsg(...): the szUserNumber is wrong.\n");
return -3;
}

if (strlen(ptUserReqMsg->szOperTime) != 8)  // 操作时间异常, 长度8位才正确
{
printf("ProcUserReqMsg(...): the szOperTime is wrong.\n");
return -4;
}

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: