本文展示一套工業級C語言編程規範,涵蓋基本類型重定義、通訊協議結構體設計、函數文檔模板及單元測試實例,適合嵌入式與系統級開發參考。
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;
STRU_MSG_HEADtypedef struct {
u16 u16MsgType; // 消息類型
u16 u16MsgLength; // 有效數據長度
u8 u8TransType; // 傳輸通道:0-網絡 1-串口
u8 u8Reserved[3]; // 字節對齊保留
} STRU_MSG_HEAD;
STRU_TIME_INFOtypedef struct {
u16 u16Year; u16 u16Month; u8 u8Day;
u8 u8Hour; u8 u8Minute; u8 u8Second;
} STRU_TIME_INFO;
// 查詢系統信息請求
struct stru_machine_info_req { STRU_MSG_HEAD struMsgHeader; };
// 系統信息響應
struct stru_machine_info_rsp {
STRU_MSG_HEAD struMsgHeader;
f32 f32Temp; f32 f32Vol; f32 f32CpuFreq;
u32 u32FreeMem; u32 u32FreeDisk;
};
// 軟件升級結果響應
struct stru_software_update_rsp {
STRU_MSG_HEAD struMsgHeader;
u8 b8Successful; u8 u8Reserved[3];
};
/********************************************************************** * 功能描述: * 輸入參數: * 輸出參數: * 返回值: * 其它說明: * 修改記錄: // 日期 版本 修改人 內容 **********************************************************************/
UnitTest.c)演示協議解析與字段校驗:定義消息結構UserReqMsg_T,主流程讀取用戶輸入,調用ProcUserReqMsg驗證操作類型(1/2)、用戶號碼長度(8位)、操作時間格式(8位)。
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;
}
關鍵規範點:使用strncpy防緩衝區溢出、參數傳遞加&取地址、詳細錯誤碼返回、統一的修改歷史記錄格式。