首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C語言編程規範與示例代碼:嵌入式開發風格指南

     編輯:關於C

一、標頭檔規範:standard.h

統一資料型別定義、訊息結構、函式文檔格式,確保跨模組協作一致性。

1. 基本型別重定義

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;

2. 通訊協定結構體

  • 訊息頭:類型、長度、傳輸通道、保留對齊位元組。
  • 時間資訊:年月日時分秒。
  • 查詢/回應結構:機器資訊、軟體升級結果等。
typedef struct {
    u16 u16MsgType;
    u16 u16MsgLength;
    u8  u8TransType;
    u8  u8Reserved[3];
} STRU_MSG_HEAD;

typedef struct {
    u16 u16Year, u16Month;
    u8  u8Day, u8Hour, u8Minute, u8Second;
} STRU_TIME_INFO;

3. 函式文檔標準模板

/**********************************************************************
 * 功能描述:
 * 輸入參數:
 * 輸出參數:
 * 返回值:
 * 其它說明:
 * 修改記錄:
 **********************************************************************/

二、單元測試範例:UnitTest.c

展示訊息封裝、參數驗證、錯誤碼回傳、安全字串複製(strncpy)等工程實務。

1. 訊息結構定義

typedef struct {
    UINT16 iReserve1, iReserve2, iReserve3, iReserve4;
} MsgHead_T;

typedef struct {
    MsgHead_T MsgHead;
    UINT32 iOperType;        // 1 或 2
    UINT8 szUserNumber[30];  // 8 位數
    UINT8 szOperTime[20];    // yyyymmdd
    UINT32 iReserve1;
    UINT8 szReserve2[50];
} UserReqMsg_T;

2. 主流程:輸入 → 封裝 → 驗證 → 輸出

INT32 main() {
    UserReqMsg_T tUserReqMsg = {0};
    // 填寫訊息頭
    tUserReqMsg.MsgHead.iReserve1 = 1; // ...

    // 讀取使用者輸入
    scanf("%d", &iOperType);
    scanf("%s", szUserNumber);
    scanf("%s", szOperTime);

    // 安全複製,防止緩衝區溢位
    strncpy(tUserReqMsg.szUserNumber, szUserNumber, strlen(szUserNumber));
    strncpy(tUserReqMsg.szOperTime, szOperTime, strlen(szOperTime));

    // 驗證業務邏輯
    INT32 iRetVal = ProcUserReqMsg(&tUserReqMsg);
    if (iRetVal == 0) {
        printf("iOperType=%d, szUserNumber=%s, szOperTime=%s\n", ...);
        return 0;
    } else {
        printf("Message content error!\n");
        return -1;
    }
}

3. 驗證函式:回傳具體錯誤碼

INT32 ProcUserReqMsg(UserReqMsg_T* ptUserReqMsg) {
    if (!ptUserReqMsg) return -1; // 空指標
    if (ptUserReqMsg->iOperType != 1 && ptUserReqMsg->iOperType != 2) return -2;
    if (strlen(ptUserReqMsg->szUserNumber) != 8) return -3;
    if (strlen(ptUserReqMsg->szOperTime) != 8) return -4;
    return 0;
}

三、核心規範重點總結

項目規範要求
型別定義統一使用 u8/u16/u32/s8/s16/s32,禁用原生型別跨模組傳遞
結構體對齊保留欄位 u8Reserved[3] 確保 4-byte 對齊
字串操作嚴禁 strcpy/sprintf,改用 strncpy/snprintf
指標傳遞函式參數用指標,呼叫端必須傳 &struct
錯誤處理分級錯誤碼(-1~-4),主程式依碼處理
記憶體管理動態分配必檢查 NULL,用完即 free
文檔註解每個函式必備標準文檔區塊,修改歷史可追溯

遵循此規範可大幅降低嵌入式專案的整合風險,提升代碼可讀性與可維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved