自己以前写代码时,一个项目一个风格。单人开发的工作使得我并没有注意到代码规范性和可读性的问题。每当项目结束后,看到自己杂乱无章的代码,完全没有二次开发和重构的欲望。

写代码就应该像写诗一样优雅。 by:沃茨基硕德

由于是一个新的项目的重新起航。千里之堤,溃于蚁穴。我将代码规范作为我整个项目的前传,顺便也把我之前的陋习给改掉。通过在网上对于C++代码规范的搜索,我找到了Google开源项目风格指南[译文]

参考这份指南,结合我个人的习惯,我也给自己的项目制定了一个标准。下面将各个部分进行定义和规范。(不会完全按照指南,只是为了我的项目代码看起来更统一)

头文件

  • 通常一个.cpp文件需要对应一个.h文件。(单元测试代码和包含main()函数的cpp文件除外。)
  • 如果.h文件声明了一个模板和内联函数,规定将函数实现写在头文件中。
  • 每个头文件必须使用#define保护,以防止多重编译
#ifndef HeadName
#define HeadName //... #endif //HeadName
  • 前置声明能不用则尽量不用。优先处理好头文件之间的关系,若不得不使用,则要注明依赖关系。
  • 内联函数:代码行数<10 才使用内联函数

命名

  • 作用域、类名、函数名用大写字母开头
namespace TurboEngine{
class Time
{
public:
int GetFps(); public:
static int ms_CalType; //静态变量 ms_
int m_StartTime; //成员变量 m_
const mk_DayInWays; //常量命名 mk_
}
}

注释

  • 使用// 或 /**/即可
  • 文件注释:加上版权
  • 类注释:
// <Description>
// Example:
// xxxxxxxxx(可写可不写)

其他

  • 因为引擎中是分模块的,为了更方便今后整理自己的思绪,我希望自己能够对每一个模块用单独的注释文件进行注释。注释文档主要包括:

    • 描述
    • 文件列表
    • 其他说明
    • 第三方依赖
<Description>
//... <FileList>
//... <Others>
//... <Reference>
//...
  • 整理API文档工具

引擎之旅 前传:C++代码规范的更多相关文章

  1. 使用CEfSharp之旅 前后端访问代码

    1.引入CEfSharp newget包 2.把平台配置为X86或X64,any cpu不支持此控件 3.引入命名空间 using CefSharp; using CefSharp.WinForms; ...

  2. JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理

    文章目录 Git管理准备工作 Git工具上传代码 发布代码装程序 mywebsql管理 京东云引擎小结   JAE京东云引擎是京东推出的支持Java.Ruby.Python.PHP.Node.js多语 ...

  3. ESP8266开发之旅 进阶篇⑤ 代码规范 —— 像写文章一样优美

    1.前言     之前,一直在跟大伙分享怎么去玩蓝牙模块,怎么去玩wifi模块,怎么去玩json,然后有很多小伙伴就留言各种问题或者说直接怼他的代码过来让我看,然后我就一脸懵逼(代码中到处各种abcd ...

  4. SpringMVC深度探险(一) —— SpringMVC前传

    在我们熟知的建立在三层结构(表示层.业务逻辑层.持久层)基础之上的J2EE应用程序开发之中,表示层的解决方案最多.因为在表示层自身的知识触角很多,需要解决的问题也不少,这也就难免造成与之对应的解决方案 ...

  5. 在Git上如何强推代码规范

    引言 最近参加了“前端规范制定topic”小组,小组成员一起制定了html.css.js.es6.vue和react等规范,但规范制定好了怎么进行推广去强制执行呢,已知我们的项目都是用git做管理的, ...

  6. 猪懂傻改之《powershell 代码规范》

    猪懂傻改之<powershell 代码规范> 脚本程序员或许都经历过这样的场景:接手别人的代码时,因为没有注释,变量名五花八门,模块之间逻辑关系如麻,弄得满头雾水,一脸茫然,痛定思痛之后不 ...

  7. Alpha代码规范、冲刺任务与计划

    Alpha代码规范.冲刺任务与计划 团队名称: 云打印 作业要求: Alpha代码规范.冲刺任务与计划 作业目标:代码规范.冲刺任务与计划. 团队队员 队员学号 队员姓名 个人博客地址 备注 2216 ...

  8. 项目Alpha冲刺——代码规范、冲刺任务与计划

    作业要求 这个作业属于哪个课程 软件工程1916-W(福州大学) 这个作业要求在哪里 项目Alpha冲刺 团队名称 基于云的胜利冲锋队 项目名称 云评:高校学生成绩综合评估及可视化分析平台 这个作业的 ...

  9. idataway_前端代码规范

    1.前后端json对接的规范. 前后端的json代码规范 result ={ success:”true”,//true表示成功,false表示失败. data:{}, //数据 errorCode: ...

随机推荐

  1. Linux shell脚本算术运算和逻辑运算

    算术运算 默认不支持算数运算.所以需要特定的语法来完成, shell进行算数运算的工具: let declare (())或$(())或$[] bc let: 格式: let var=算术表达式 例如 ...

  2. 分布式机器学习:模型平均MA与弹性平均EASGD(PySpark)

    计算机科学一大定律:许多看似过时的东西可能过一段时间又会以新的形式再次回归. 1 模型平均方法(MA) 1.1 算法描述与实现 我们在博客<分布式机器学习:同步并行SGD算法的实现与复杂度分析( ...

  3. springboot集成redis集群

    1.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...

  4. [SWPU2019]Web1-1|SQL注入

    1.打开之后界面如下: 2.查看源代码.登录注入等未发现有用信息,结果如下: 3.进行注册试试,注册时发现admin账户已被注册,随便注册一个账户并登录,结果如下: 申请发布广告页面如下: 4.发布广 ...

  5. 一张图进阶 RocketMQ - 消息存储

    前言 三此君看了好几本书,看了很多遍源码整理的 一张图进阶 RocketMQ 图片,关于 RocketMQ 你只需要记住这张图!觉得不错的话,记得点赞关注哦. [重要]视频在 B 站同步更新,欢迎围观 ...

  6. Netty源码解读(四)-读写数据

    读写Channel(READ)的创建和注册 在NioEventLoop#run中提到,当有IO事件时,会调用processSelectedKeys方法来处理. 当客户端连接服务端,会触发服务端的ACC ...

  7. Map集合和Map常用子类

    Map集合 java.util.Map<K,V>集合 Map集合的特点: 1.Map集合是一个双列集合,一个元素包含两个值(Key,Value) 2.Map集合中的元素,key和value ...

  8. MYSQL常见可优化场景

    1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null 可以在num上设置 ...

  9. Win10系统下使用Django2.0.4+Celery4.4.2+Redis来实现异步任务队列以及定时(周期)任务(2020年最新攻略)

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_153 首先明确一点,celery4.1+的官方文档已经详细说明,该版本之后不需要引入依赖 django-celery 这个库了,直 ...

  10. MyBatis-知识点详解

    Mybatis 中$与#的区别 1 #是将传入的值当做字符串的形式,eg:select id,name,age from student where id =#{id},当前端把id值1,传入到后台的 ...