C編程規範, 範例程式碼。

來源:互聯網
上載者:User

標籤:檔案   資料   2014   io   代碼   時間   

/****************************************************************Copyright (c) 2014,TianYuan*All rights reserved.**檔案名稱: standard.h*檔案標識: 編程規範範例程式碼**目前的版本:V1.0*wuyq *完成日期:20140709**修改記錄1:   //修改記錄,包括修改日期、版本號碼、修改人及修改內容等*修改日期        版本號碼              修改人         修改內容* --------------------------------------------------------------------------------------------------* 20140709         V1.0                wuyq            建立******************************************************************/#ifndef _STANDARD_H__#define _STANDARD_H__/*重定義一些基礎資料型別 (Elementary Data Type)*/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;}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.