代码规范相关

本文详细介绍了C/C++编程中头文件和C文件的布局规范,包括文件头的注释格式,函数和结构体的命名规则,以及枚举、变量、函数的定义方式。同时,提到了宏、常量的命名约定和文件命名规则,确保代码的可读性和一致性。
摘要由CSDN通过智能技术生成

一、排版布局

  1. 头文件布局

#ifndef 文件名_H(全大写)
#define 文件名_H
其它条件编译选项
#include(依次为标准库头文件、非标准库头文件)
常量定义
全局宏
全局数据类型
类定义
模板(template)(包括C++中的类模板和函数模板)
全局函数原型
#endif

  1. C文件布局

#include(依次为标准库头文件、非标准库头文件)
常量定义
文件内部使用的宏
文件内部使用的数据类型
全局变量
本地变量(即静态全局变量)
局部函数原型
类的实现
全局函数
局部函数

二、注释

  1. 文件头部的注释,可以是英文也可以是中文(不做具体要求,建议统一采用中文)。具体格式如下:
/*********************************************************************
* 内容摘要: 按键检测相关
* 其它说明: 首次更新
* 当前版本: V1.0.0
* 作    者: zy
* 完成日期: 20200201
**********************************************************************/



/***********************************************************************
* Description:  	// 简要描述本文件的内容,完成的主要功能
* Others:  	// 其它内容的说明
* Version:  	// 输入当前版本
* Author:  	// 输入作者名字及单位
* Date:  	// 输入完成日期,例:2001-12-12
**********************************************************************/

  1. 函数头部注释,可以是英文也可以是中文(不做具体要求,建议统一采用中文)。具体格式如下:
/**********************************************************************
 * 函数名称: DebugInfor
 * 功能描述: 打印相关信息
 * 输入参数: 无
 * 输出参数: 无
 * 其它说明: 观察内存使用情况
 ***********************************************************************/

三、结构体、枚举等

  1. 结构体:(以小写st开头,后缀Def)

定义结构体可以使用
typedef struct
{
U16 u16DataMember1;
U8 u8DataMember2;

}stNameDef
stNameDef stName;
加粗是相关格式

/*电池状态数据*/
typedef struct
{
    U16 u16Volt;           /*电压*10mv*/
    U16 s16Current;         /*电流*10mA*/
    U16 u16TotalCapacity;  /*总容量*mAh*/
    U16 u16RemainCapacity; /*剩余容量*mAh*/
    U8 u8RemainPercent;    /*剩余容量百分比*1%*/
    U8 u8Temper;           /*电池温度*1°,偏移40*/
    U8 u8Status;           /*状态码*/
    U8 u8SOH;              /*SOH百分比,单位1%*/
    U32 u32Err;            /*故障码*/
    U8 u8PowerOff;         /*关机指令*系统即将关闭时主动广播,轻触关机键(或者其他关机操作)后,电池不直接掉电*/
    iot_uint16 u16SwVer;          /*软件版本*/
    iot_uint16 u16HwVer;          /*硬件版本*/
} stBmsInfoDef;

stBmsInfoDef stBmsInfo;//定义结构体数据 
stBmsInfoDef *UsrSensorGetBmsInfo(void)
{
    return &stBmsInfo;
}

stBmsInfoDef *pstBmsInfo = UsrSensorGetBmsInfo();//定义结构体指针
  1. 枚举:(以小写em开头,后缀Def)

定义枚举可以使用
typedef enum
{
STEP_0 = 0x00,
STEP_1 ,
STEP_2 ,
STEP_3 ,
STEP_4 ,
STEP_5 ,
STEP_6

} emNameDef;
emNameDef emName;
加粗是相关格式

typedef enum{
                DATA_ODO_SHOW = 0x00,//ODO数据是否显示
				DATA_TRIP_SHOW ,//TRIP数据是否显示
                DATA_MAX_SPEED_SHOW, //MAX_SPEED数据是否显示
                DATA_AVG_SPEED_SHOW,//AVG_SPEED数据是否显示
                DATA_TIME_SHOW,//TIME数据是否显示
                DATA_CADENCE_SHOW,//CADENCE数据是否显示
                DATA_REMAIN_SHOW,//REMAIN数据是否显示
                DATA_CAL_SHOW,//CAL数据是否显示
                ADVAN_DATA_SHOW_EXIT//退出
			}emSetAdvanDataShowIndexDef;//高级设置之主页cycle数据显示哪些 
			emSetAdvanDataShowIndexDef emSetAdvanDataShowIndex;//定义枚举数据
  1. 联合体:(以小写un开头,后缀Def)

定义联合体可以使用
typedef union
{
}unForExampleDef, *punForExampleDef;
unForExampleDef unTestDevice;

四、变量、函数

  1. 函数需要使用帕斯卡命名方法,即函数名中每个逻辑断点都要一个大写字母来标记,并且最好见名知意;如果是只在当前文件中使用的函数最好加上static,限制其使用范围;函数名应准确描述函数的功能,使用动宾词组为执行某操作的函数命名

static void OpenSetHomePage( void );
void PrintRecord( unsigned int RecInd ) ;
int InputRecord( void ) ;
unsigned char GetCurrentColor( void ) ;

  1. 变量命名使用驼峰命名法,即变量第一个单词首字母小写,余下单词首字母大写,并且第一个单词最好是变量类型;非指针命名:类型+描述(u8Temp),指针命名:p+类型+描述(float *pfTemp uint8 *pu8Temp)

U16 u16CurSpeed;
U8 u8CycleCount;
float fPower;
U8 *pu8StrLabel;
U8 arrLabelTitle[10][20];

五、宏及常量命名

均大写加下划线,每个逻辑断点使用下划线连接起来

/*电池状态定义*/
#define BMS_STATUS_CHARGING 			(0x01)         /*充电*/
#define BMS_STATUS_DISCHARGING 			(0x02)     	   /*放电*/
#define BMS_STATUS_SHELVED 				(0x03)        /*搁置*/
#define BMS_STATUS_BALANCED 			(0x04)        /*均衡*/
#define BMS_STATUS_PROTECTED 			(0x05)       /*保护*/
#define BMS_STATUS_PERMANENT_FAULT 		(0x06) 		/*永久失效*/


/*电池故障码*/
#define BMS_ERR_CHARGING_OVER_VOLT 			(iot_uint32)(0x00000001)          /*充电过压*/
#define BMS_ERR_CHARGING_OVER_CURRENT 		(iot_uint32)(0x00000001 << 1)  	  /*充电过流*/
#define BMS_ERR_CHARGING_HIGH_TEMPER 		(iot_uint32)(0x00000001 << 2)    /*充电高温*/
#define BMS_ERR_CHARGING_LOW_TEMPER 		(iot_uint32)(0x00000001 << 3)    /*充电低温*/
#define BMS_ERR_DISCHARGE_OWE_VOLT 			(iot_uint32)(0x00000001 << 4)    /*放电欠压*/
#define BMS_ERR_DISCHARGE_OVER_CURRENT 		(iot_uint32)(0x00000001 << 5) 	/*放电过流*/
#define BMS_ERR_DISCHARGE_OVER_TEMPER 		(iot_uint32)(0x00000001 << 6)  	/*放电过温*/
#define BMS_ERR_DISCHARGE_LOW_TEMPER 		(iot_uint32)(0x00000001 << 7)   /*放电低温*/
#define BMS_ERR_PERMANENT_FAULT 			(iot_uint32)(0x00000001 << 8)   /*BMS永久故障*/

#define RECTANGLE_AREA( a, b ) ((a) * (b))//用宏定义表达式时,要使用完备的括号。

六、文件

文件命名规则,以能将代码实现功能做一概括性描述为准则,和函数一致。

example: DevKey.c ,UiHomePage.c,UsrTypedef.h

七、数据类型

变量的数据类型,在不同的mcu体系结构下,其长度是不同的,有必要做统一的规范。在软件工程中,强制要求采用下面示例的变量类型定义头文件。保证数据类型的统一

#ifndef __BASIC_DATA_TYPE_H__
#define __BASIC_DATA_TYPE_H__


#define MAX_NAME_LENGTH                         200 
#define MAX_UNIT_LENGTH                         50 

#ifndef NULL 
#define NULL (void *)0
#endif

#ifndef bool
#define bool unsigned char
#endif

#ifndef TRUE 
#define TRUE 1
#endif

#ifndef FALSE 
#define FALSE 0
#endif 

#ifndef true 
#define true 1
#endif

#ifndef false 
#define false 0
#endif 

typedef signed char              S8; //        s8
typedef unsigned char            U8; //        u8

typedef signed short int         S16; //        s16
typedef unsigned short int       U16; //        u16

typedef signed int               S32; //        s32
typedef unsigned int             U32; //        u32

typedef signed long long         S64; //        s64
typedef unsigned long long       U64; //        u64

typedef	long double              float80; //        f80
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值