摘要:本文是C语言代码规范
1.摘要
本文是C语言代码规范
2.命名
2.1文件命名
app_user.c
app_user.h
2.2类型命名
2.2.1简单类型命名
typedef uint8_t fan_status_t;
2.2.2结构体和联合体命名
typedef struct fan_info{
uint8_t gear;
uint8_t dir;
}fan_info_t;
typedef struct device_info{
uint8_t switch;
fan_info_t fan;
}device_info_t;
device_info_t g_device_info;
2.2.3枚举命名
typedef enum pos_info{
DIR_FIXED = 1,
DIR_UAD,
DIR_LAR,
}pos_info_t;
2.4变量命名
uint8_t fan_switch = 0;
2.5函数命名
void handle_fan_switch_cmd(int value);
2.6宏命名
#define FAN_UART_HEAD 0x55
#define PRODUCT_TEST_KEY "123456"
2.7前缀
int HILINK_PutCharState();
3.格式
3.1文本格式
.c、.h、Makefile 采用UTF-8 without BOM编码,Unix风格
3.2花括号
函数体左花括号另起一行,其他情况不用另起一行
3.3空格
1、逗号右侧有内容,逗号后有空格
2、分号右侧有内容,分号后有空格
3.4指针
1、指针声明或定义时,*靠近变量名称。*与修饰符间有空格
int *p;
const char *name;
void * const ptr;
void (*func)(void *arg);
3.5注释
采用/**/
/*
* Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
* Description: HiLink产品适配实现源文件
*/
/* This pointer must NOT be NULL. */
4.头文件
4.1引号和尖括号
与源文件同路径文件夹时用引号,其他情况尖括号
#include <stdio.h>
#include "my_demo.h"
4.2包含次序
C语言标准库头文件
公用组件的头文件
本工程头文件
#include <stdio.h>
#include <pthread.h>
#include "my_demo.h"
4.3保护
头文件都应该使用define保护来防止被重复包含,格式为PATH_FILE_H
#ifndef HILINK_DEVICE_H
#define HILINK_DEVICE_H
/* 内容 */
#endif /* HILINK_DEVICE_H*/
4.4函数、变量声明
在定义文件中定义全局变量, 比如A.cpp中定义全局变量 int aa;
在对应的头文件A.h中声明外部变量 extern int aa;
在使用aa变量的文件B.cpp中包含A.h;
4.5 extern "C"关键字
公用头文件中声明的函数和全局变量应该用extern "C"关键字修饰。
#include不使用extern "C"关键字修饰。
#define、类型定义不做要求。
#ifndef HILINK_DEVICE_H
#define HILINK_DEVICE_H
#ifdef __cplusplus
extern "C"{
#endif
#define FIRMWARE_VER "1.0.0"
#define SOFTWARE_VER "1.0.0"
#define HARDWARE_VER "1.0.0"
typedef struct {
char svcType[32]; /* 服务类型,长度范围(0, 32] */
char svcId[64]; /* 服务ID,长度范围(0, 64] */
} HILINK_SvcInfo;
int HILINK_PutCharState(const char *svcId, const char *payload, unsigned int len);
#ifdef __cplusplus
}
#endif
#endif /* HILINK_DEVICE_H*/
5.其他
只在本编译单元使用的函数、全局变量应使用static修饰符。
在不影响功能的前提下,指针类型的函数参数尽量使用const修饰符。
自增、自减运算符单独使用时采用后置形式。
数组、结构体初始化列表、枚举类型定义中的最后一个成员之后应有逗号。
打印到终端的信息一律使用英文,以避免终端编码问题。
int offsets[] = {
0,
1,
};
参考: