Part1--软件规范总纲
开发人员规范
软件代码编写规范
套话
- 目的:统一公司编码风格;提高代码易读性、可靠性和稳定性;减少软件维护成本提高生产力
- 基本原则:维持代码易读、可维护;保持代码清晰;尽可能复用代码
实用规则
缩进
- 新增文件缩进4空格;
- 平台文件中新增函数、结构体、枚举类型4空格缩进;已经有的跟上面保持一致缩进。
- vscode回车自动缩进四字符
括号
- 不需要括号的语句尽量不要括号(if后面的)
- 新建文件有两种风格,已有文件按照本来的风格
window风格
if (xxx)
{
}
else
{
}
Linux风格
if (xxx){
}else{
}
Linux其他示例
// do-while
do {
} while (1);
//switch可以和case对齐,也可以不对齐
//函数体不用把左括号写在一行
int func(void)
{
}
空格
if (xxx); //关键字后面加
sizeof(int)//函数后不加
int c = func(int a, int b) //注意括号里侧不加
int sum = a + b; //二元以上运算符加
~a a++//一元运算符不加
代码长度
- 每行不超过120字符,下面的行与括号对齐
void nwy_client_voice_ind_cb
(
client_handle_type hndl,
uint32 msg_id,
void *ind_struct,
uint32 ind_len
)
nwy_test_func1(hndl,
MCM_VOICE_COMMAND_REQ_V01,
&req_msg,
resp_msg,
NULL,
&token_id);
命名规范
- 所有命名都以由小写和_组成
- 新添文件以nwy开头,名副其实
- 新建结构体以nwy_开头,加了typeof后面再加_t
- 变量不带nwy开头!!
- 全局变量g_开头,加static,跨文件调用封装后使用
- 变量使用前初始化,数组使用前检空
- 注释是英文,源文件是中文的话无所谓
二次开发
(add modify delete)
/*Begin: Add by Author to Reason in Date*/
code
/*End: Add + Author + Reason + Date*/
//倘如已经有如上注释了,后续就把名字日期改一下就行,不要叠加
- 修改、新增、删除宏定义可以不加注释
注释风格、体现信息
//新建源文件
/*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====
Copyright (c) 2017 Neoway Technologies, Inc.
All rights reserved.
Confidential and Proprietary - Neoway Technologies, Inc.
Author: liuhui
Date: 2018.05
*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*====*/
/*****************************************************************************
//新建函数
FUNCTION nwy_get_adc
/*****************************************************************************
@Desc: Get adc value of the channel
@Para: fd – file handle
port – the Channel of Adc
@Return: 0 - True, -1 - Error
*****************************************************************************/
宏
必须大写和_起名
有两种,功能宏编译源文件,项目宏打开对应功能模块
加功能必须添加功能宏,功能宏名字不能带项目名
客户定制加客户定制宏
去掉宏不影响编译
调试、参数、函数宏以NWY开头
修改对全部项目都有效或都无效可以不加宏直接改代码
一定要注意,#ifdef后面不用括号,#if defined(xxx)有括号,最后都要加个#endif
//判断单个宏是否有定义 #ifdef = #if defined
#defined PI 3.14
#ifdef PI
code
#endif
//判断多个宏(或、且)用#if defined
#if defined (XXX) || defined (YYY)
code1
#elif defined (KKK)
code2
#endif
//复杂判断用#if
#define XXX 0
#define YYY 4
#if (XXX) || (YYY > 3) || defined (YYY)
code1
#elif defined (KKK)
code2
#endif
宏定义可以顶格写或者缩进到和上一行相同
代码提交及审核自测规范
git提交,gerrit审核
代码静态检查
cppcheck插件
git代码提交规范
临时版本规范
路径
- 192.168.2.12\版本流转\2.临时版本\
结尾
- _Taabbccxxyy 例如_T2308091122 ,2023年8月9日11点22分编译的
归档文件
- ELF、MAP、变更说明、自测记录
TD规范
问题记录规范
Part1--软件规范总纲的更多相关文章
- Python--面向对象的程序设计之组合应用、开发软件规范
组合应用: class Teacher: def __init__(self,name,age,sex,salary,level): self.name=name self.age=age self. ...
- 微软开放技术发布开源的微软云服务器底盘管理器 (Chasis Manager) 软件
发布于 2014-07-14 作者 陈 忠岳 今天,微软公司加入开放计算项目(OCP),贡献出硬件和软件规范,管理 API 和协议,机械 CAD 模型,以及电路板文件和 Gerbers(描述印刷 ...
- AUTOSAR-软件规范文档中的UML
https://mp.weixin.qq.com/s/vm5vWNSpbNIYh25-LjJfYg AUTOSAR软件规范文档中存在两种UML图: Sequence diagrams Config ...
- AUTOSAR-软件规范文档阅读
https://mp.weixin.qq.com/s/Jzm9oco-MA-U7Mn_6vOzvA 基于AUTOSAR_SWS_CANDriver.pdf,Specification of CAN ...
- Spring AOP 实现原理与 CGLIB 应用
https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/ AOP(Aspect Orient Programming),也就是面向 ...
- QC缺陷管理操作-细说(转)
一.缺陷常用字段说明 二.缺陷管理流程图 三.开发人员修改缺陷填写规范 四.项目经理决定延期修改缺陷 一.缺陷常用字段说明 1.摘要 对缺陷的简单描述.摘要包括该缺陷所属的模块名称-子模块名称,以及简 ...
- Spring核心框架 - AOP的起源及介绍
一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...
- Spring AOP 实现原理与 CGLIB 应用--转
AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等.AOP 实现的关键就在于 ...
- 采访 Lua 发明人的一篇文章
采访 Lua 发明人的一篇文章 来源 https://blog.codingnow.com/2010/06/masterminds_of_programming_7_lua.html <Mast ...
- 20160210.CCPP体系详解(0020天)
程序片段(01):01.二级指针.c 内容概要:二级指针 #include <stdio.h> #include <stdlib.h> //01.二级指针: // 1.使用场景 ...
随机推荐
- Pytorch-实战之对Himmelblau函数的优化
1.Himmelblau函数 Himmelblau函数: F(x,y)=(x²+y-11)²+(x+y²-7)²:具体优化的是,寻找一个最合适的坐标(x,y)使得F(x,y)的值最小. 函数的具体图像 ...
- WPF基础:在Canvas上绘制图形
Canvas介绍 Canvas是WPF(Windows Presentation Foundation)中的一种面板控件,用于在XAML中布置子元素.它提供了绝对定位的能力,允许元素在自由的二维空间中 ...
- 嘉楠k210 kd233官方demo板gpio点灯实验
使用maixpy micropython开发 import utime from Maix import GPIO from board import board_info from fpioa_m ...
- Django框架——cookie与session简介、django操作cookie与session、django中间件
cookie与session简介 """ 回忆:HTTP协议四大特性 1.基于请求响应 2.基于TCP.IP作用于应用层之上的协议 3.无状态 不保存客户端的状态 4.无 ...
- JavaWeb技术JSP连接数据库操作
"感谢您阅读本篇博客!如果您觉得本文对您有所帮助或启发,请不吝点赞和分享给更多的朋友.您的支持是我持续创作的动力,也欢迎留言交流,让我们一起探讨技术,共同成长!谢谢!" 0X01 ...
- 力扣341(java)-扁平化嵌套列表迭代器(中等)
题目: 给你一个嵌套的整数列表 nestedList .每个元素要么是一个整数,要么是一个列表:该列表的元素也可能是整数或者是其他列表.请你实现一个迭代器将其扁平化,使之能够遍历这个列表中的所有整数. ...
- 科普达人丨一图看懂阿里云ECS
简介: 建议收藏 原文链接:https://click.aliyun.com/m/1000363154/ 本文为阿里云原创内容,未经允许不得转载.
- 一文详解 Serverless 架构模式
什么是 Serverless 架构?按照 CNCF 对 Serverless 计算的定义,Serverless 架构应该是采用 FaaS(函数即服务)和 BaaS(后端服务)服务来解决问题的一种设计. ...
- [Py] Python json str 字符串转为对象 (字典)
import json json = '{"code": 0}' # Deserialize ``s`` (a ``str``, ``bytes`` or ``bytearray` ...
- dotnet 提升 ToUpper 性能
在应用软件启动过程中,客户端应用软件是对性能敏感的.比如在解析命令行参数的时候,有时候需要进行字符串处理逻辑.一般来说命令行参数都是语言文化无关的,在需要进行全大写或全小写转换过程中,采用 ToUpp ...