开发人员规范

软件代码编写规范

套话

  • 目的:统一公司编码风格;提高代码易读性、可靠性和稳定性;减少软件维护成本提高生产力
  • 基本原则:维持代码易读、可维护;保持代码清晰;尽可能复用代码

实用规则

缩进

  • 新增文件缩进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代码提交规范

模板

提交模板设置

git入门教程

稍微详细的教程

临时版本规范

路径

  • 192.168.2.12\版本流转\2.临时版本\

结尾

  • _Taabbccxxyy 例如_T2308091122 ,2023年8月9日11点22分编译的

归档文件

  • ELF、MAP、变更说明、自测记录

TD规范

没看懂,上链接

问题记录规范

Part1--软件规范总纲的更多相关文章

  1. Python--面向对象的程序设计之组合应用、开发软件规范

    组合应用: class Teacher: def __init__(self,name,age,sex,salary,level): self.name=name self.age=age self. ...

  2. 微软开放技术发布开源的微软云服务器底盘管理器 (Chasis Manager) 软件

     发布于 2014-07-14 作者 陈 忠岳 今天,微软公司加入开放计算项目(OCP),贡献出硬件和软件规范,管理 API 和协议,机械 CAD 模型,以及电路板文件和 Gerbers(描述印刷 ...

  3. AUTOSAR-软件规范文档中的UML

    https://mp.weixin.qq.com/s/vm5vWNSpbNIYh25-LjJfYg   AUTOSAR软件规范文档中存在两种UML图: Sequence diagrams Config ...

  4. AUTOSAR-软件规范文档阅读

    https://mp.weixin.qq.com/s/Jzm9oco-MA-U7Mn_6vOzvA   基于AUTOSAR_SWS_CANDriver.pdf,Specification of CAN ...

  5. Spring AOP 实现原理与 CGLIB 应用

    https://www.ibm.com/developerworks/cn/java/j-lo-springaopcglib/ AOP(Aspect Orient Programming),也就是面向 ...

  6. QC缺陷管理操作-细说(转)

    一.缺陷常用字段说明 二.缺陷管理流程图 三.开发人员修改缺陷填写规范 四.项目经理决定延期修改缺陷 一.缺陷常用字段说明 1.摘要 对缺陷的简单描述.摘要包括该缺陷所属的模块名称-子模块名称,以及简 ...

  7. Spring核心框架 - AOP的起源及介绍

    一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...

  8. Spring AOP 实现原理与 CGLIB 应用--转

    AOP(Aspect Orient Programming),作为面向对象编程的一种补充,广泛应用于处理一些具有横切性质的系统级服务,如事务管理.安全检查.缓存.对象池管理等.AOP 实现的关键就在于 ...

  9. 采访 Lua 发明人的一篇文章

    采访 Lua 发明人的一篇文章 来源 https://blog.codingnow.com/2010/06/masterminds_of_programming_7_lua.html <Mast ...

  10. 20160210.CCPP体系详解(0020天)

    程序片段(01):01.二级指针.c 内容概要:二级指针 #include <stdio.h> #include <stdlib.h> //01.二级指针: // 1.使用场景 ...

随机推荐

  1. mysql 必知必会整理——mysql 介绍[一]

    前言 对mysql 进行简介. 正文 mysql 是一种数据库,那么什么是数据库呢? 数据库是一个以某种有组织的方式存储的数据集合. 也就是说数据有某种组织规律的就叫做数据库. 数据库(databas ...

  2. mysql 重新整理——性能下降的原因[四]

    前言 什么是性能下降? 其实就是代码运行的环境变了,那么环境变化是什么? 比如cpu上升了,内存满了.有或者表中数量增加了,量变了. 其实这些是dba干的,但是呢,我们也需要去了解下,并且优化我们的c ...

  3. ef 查询生成语句的几种方式

    前言 整理一下ef 如何查看生成sql 语句的,现在有ef core 了,统一整理一下. 正文 方式如下: 数据库监听 这是一种推荐方式,因为调试和代码分开,不会有影响. 然后连接: 然后可以进行一些 ...

  4. js es6 map weakmap

    前言 这里介绍一些map和weakmap的一些属性和他们不同之处. 正文 map JavaScript 的对象(Object),本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键.这 ...

  5. 利用PyTorch训练模型识别数字+英文图片验证码

    利用PyTorch训练模型识别数字+英文图片验证码 摘要:使用深度学习框架PyTorch来训练模型去识别4-6位数字+字母混合图片验证码(我们可以使用第三方库captcha生成这种图片验证码或者自己收 ...

  6. 嘉楠k210 多线程 点亮流水灯

    from Maix import GPIO from fpioa_manager import fm import _thread import time fm.register(24, fm.fpi ...

  7. 微信小程序报错:Expecting 'STRING', got INVALID

    具体错误如下图: 这是因为在微信小程序的 app.json 文件中是不能包含有注释的,只需要把注释去掉就可以了.

  8. 数据结构实验代码分享 - 3 (哈夫曼树 / HuffmanTree)

    哈夫曼编码/ 译码系统(树应用) [问题描述] 任意给定一个仅由 26 个大写英文字母组成的字符序列,根据哈夫曼编码算法,求得每个字符的哈夫曼编码. 要求: 1)输入一个由 26 个英文字母组成的字符 ...

  9. 力扣349(java&python)-两个数组的交集(简单)

    题目: 给定两个数组 nums1 和 nums2 ,返回 它们的交集 .输出结果中的每个元素一定是 唯一 的.我们可以 不考虑输出结果的顺序 . 示例 1: 输入:nums1 = [1,2,2,1], ...

  10. 力扣537(java)-复数乘法(中等)

    题目: 复数 可以用字符串表示,遵循 "实部+虚部i" 的形式,并满足下述条件: 实部 是一个整数,取值范围是 [-100, 100]虚部 也是一个整数,取值范围是 [-100, ...