C编程规范, 演示样例代码。
Posted Brenda
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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("操作类型: \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; }
以上是关于C编程规范, 演示样例代码。的主要内容,如果未能解决你的问题,请参考以下文章
展示C代码覆盖率的gcovr工具简单介绍及相关命令使用演示样例
10分钟理解Android数据库的创建与使用(附具体解释和演示样例代码)