程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C編程規范, 示例代碼。

C編程規范, 示例代碼。

編輯:關於C語言

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 
#include 
 
// 重定義數據類型
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;
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved