DTX Studio 项目代码规范

1、代码编写风格

一个成熟的程序员,他们的代码从不只是给自己看的。清晰的排版,合理的逻辑分层,会使代码好看很多,也让枯燥生活中引入一丝强迫症的趣味。

1.0、语法部分

缩进原则:以各语法默认格式进行缩进
排版原则:以各代码功能进行划分,空行为界

#include <iostream>
using namespace std;
 
class salary
{
public:
    salary(){}
    ~salary(){}
    virtual void pay(){}
private:
};
 
class member1:public salary
{
public:
    member1(double a){_total = a;}
    ~member1(){}
    void pay()
    {
        cout << "每月给员工 1 的薪水为:" << _total << "元" << endl;
    }
private:
    double _total;
};
 
class member2:public salary
{
public:
    member2(double a){_total = a;}
    ~member2(){}
    void pay()
    {
        cout << "每月给员工 2 的薪水为:" << _total << "元" << endl;
    }
private:
    double _total;
};
 
int main()
{
    member1 m1(4000.0);
    member2 m2(10000.0);
    salary *sa1 = &m1;
    salary *sa2 = &m2;
    sa1->pay();
    sa2->pay();
    
    return 0;
}

1.1、主项目文件部分(.cpp)

// 预定义部分
#include <iostream>             // 头文件
#include “MyHead.h”             // 自定义头文件

#define SIZE 233                // 明示常量
#define PI x * x                // 宏函数

// 结构体部分
struct abc { };                 // 结构声明

// 函数部分
void function();                // 函数声明

// 自定义类型部分
typedef char byte;              // 类型定义

// 全局变量部分
const int PI = 3.14;            // const限定符定义
int a;                          // 全局变量

// 主函数
int main()
{
    return 0;
}

// 其余函数
void function()
{
    
}

1.2、自定义头文件部分(.h)

编写原则:只写声明,不写定义

#pragma once
// 预定义部分
#include <iostream>             // 头文件
#include “MyHead.h”             // 自定义头文件

#define SIZE 233                // 明示常量
#define PI x * x                // 宏函数

// 结构体部分
struct abc { };                 // 结构声明

// 函数部分
void function();                // 函数声明

// 自定义类型部分
typedef char byte;              // 类型定义

// 全局变量部分
const int PI = 3.14;            // const限定符定义
int a;                          // 全局变量

1.3、自定义头文件内置函数定义部分(.cpp)

void function()
{
    
}

2、命名约定

初学计算机的时候,我们常使用形如 a、b、c 的变量,来进行编程。但是随着学习的深入,简单的变量名无法满足我们的需求。比如在进行算法题的时候,或者是进行未来进行独立的软件开发的时候。故而我们要采用一种比较通用的规范命名,让自己和他人比较快速和比较清晰看懂原本繁杂的代码。

命名的风格能让我们在不需要去查找类型声明的条件下快速地了解某个名字代表的含义:类型,变量,函数,常量,宏等等。我们大脑中的模式匹配引擎非常依赖这些命名规则.

命名规则具有一定随意性,但相比按个人喜好命名,一致性更重要。下面我们以目前的技术水平为基础,规定一套详细的命名规则。

2.1、通用命名规则

总述

函数命名,变量命名,文件命名要有描述性;少用缩写。

说明

尽可能使用描述性的命名,别心疼空间,毕竟相比之下让代码易于新读者理解更重要。不要用只有项目开发者能理解的缩写,也不要通过砍掉几个字母来缩写单词。

int price_count_reader;    // 无缩写
int num_errors;            // "num" 是一个常见的写法
int num_dns_connections;   // 人人都知道 "DNS" 是什么

int n;                     // 毫无意义.
int nerr;                  // 含糊不清的缩写.
int n_comp_conns;          // 含糊不清的缩写.
int wgc_connections;       // 只有贵团队知道是什么意思.
int pc_reader;             // "pc" 有太多可能的解释了.
int cstmr_id;              // 删减了若干字母.

注意,一些特定的广为人知的缩写是允许的,例如用 i 表示迭代变量( for 语句的循环)。

2.2、文件命名

总述

文件命名不只是我们的C语言,更加是包括今后所有的命名。命名要有意义,最好是能详细的表示文件的主要内容,如 Factorial Calculation

命名原则

我们采用单词命名法:以单词组成的名字给文件进行命名,不同单词以空格分格。

注意:文件命名时不允许使用下划线等任何形式符号。

2.3、类型命名

总述

类型名称的每个单词首字母均大写, 不包含下划线: MyExcitingClass, MyExcitingEnum.

说明

所有类型命名 —— 结构体,枚举,类型模板参数 —— 均使用相同约定,即以大写字母开始,每个单词首字母均大写,不包含下划线.。

 // 结构体
struct UrlTableProperties { ...
    
// 枚举
enum UrlTableErrors { ...

2.4、变量命名

普通变量命名

使用小驼峰命名法,即除第一个单词小写外,其他的均使用大写开头。

int myLocalVariable;
long int myInstanceVariable;

结构体变量

结构体名使用大驼峰命名法;结构体数据成员不管是静态的还是非静态的,都可以和普通变量一样。

struct UrlTableProperties {
  string name;
  int num_entries;
  static Pool<UrlTableProperties>* pool;
};

结构体与类的使用讨论, 参考 结构体 vs. 类.

2.5、常量命名


声明为 const 的变量,或在程序运行期间其值始终保持不变的,命名完全大写。

const int SIZE = 7;

所有具有静态存储类型的变量 (例如静态变量或全局变量)都应当以此方式命名。对于其他存储类型的变量, 如自动变量 auto 等,这条规则是可选的。如果不采用这条规则,就按照一般的变量命名规则。

2.6、函数命名

总述

函数名采用大驼峰命名法,没有下划线. 对于首字母缩写的单词,更倾向于将它们视作一个单词进行首字母大写 (例如, 写作 StartRpc() 而非 StartRPC() ).

AddTableEntry();
DeleteUrl();
OpenFileOrDie();

2.7、枚举命名

枚举的命名应当和 常量 或者 一致:ARRAYENUM_NAME

单独的枚举值应该优先采用 常量 的命名方式. 但 方式的命名也可以接受. 枚举名 UrlTableErrors 以及 AlternateUrlTableErrors 是类型,,所以要用大小写混合的方式.

enum UrlTableErrors;
enum AlternateUrlTableErrors
{
    OK = 0,
    OUT_OF_MEMORY = 1,
    MALFORMED_INPUT = 2,
};

2.8、宏命名

我们一般采用以下的方式来进行宏的命名

#define MY_MACRO_THAT_SCARES_SMALL_CHILDREN

通常 不应该 使用宏. 如果不得不用,其命名像枚举命名一样全部大写,并使用下划线:

2.9、命名规则的特例

总述

如果你命名的实体与已有 C/C++ 实体相似, 可参考现有命名策略.

bigopen(): 函数名, 参照 open() 的形式

uint : typedef

bigpos: structclass, 参照 pos 的形式

sparse_hash_map: STL 型实体; 参照 STL 命名约定

LONGLONG_MAX : 常量, 如同typedef

2.10、常见的编程命名缩写

通用 缩写 翻译 控件 缩写 翻译
address addr 地址 calendar cdr 日历
application app 应用程序 messageDialog msgdlg 消息框
asynchronization asyn 异步 drawer drw 抽屉
average avg 平均数 buttonGroup btngrp 按钮分组
bitmap bmp 位图 checkBox chk 复选框
buffer buf 缓冲区 container cntr 容器
character char 字符 button btn 按钮
color clr 颜色 comboBox cmb 下拉框
command cmd 命令 lable lbl 标签
delete del 删除 progressBar prg 进度条
destination dest/dst 目的地 pageIndicator pgindic Tab分页控件
decrease dec 减少 radioButton rdo 单选框
device dev 设备 rangeSlider rngsld 滑块
different diff 不同的 scrollView svw 视图滚动
directory dir 目录 scrollBar vsb(垂直)/hsb(水平) 滚动条
document doc 文档 slider sld 滑动器
dynamic dyna 动态的 spinBox spn 旋转框
environment env 环境 splitView spltvw 分割视图
error err 错误 stackView stackvw 堆栈视图
execute exec 执行 statusBar statbr 状态条
group grp swipeView swpvw 滑动控件
image img 图像 switch sw 开关
information info 信息 tabBar tbbr tab栏
initialize init 初始化 textField txtfld 文本输入框
library lib toolBar tlbr 工具栏
maximum max 最大值 toolTip tltp 提示框
minimum min 最小值 toolButton tlbtn 工具按钮
message msg 消息 treeView trvw 树形视图
number num 数字,数,数量 layout lyt 布局
object obj 对象 mainMenu mmnu 菜单栏
parameter Param 参数(形参) groupBox gbx 组合框
package pkg 打包 pictureBox pic 图片框
position pos 位置 listView lvw 列表视图
previous pre 前一个 window win(wnd) 窗口
process/Procedure proc 进程/过程 form frm 表单
pointer ptr 指针 textBox txt 文本框
password pwd 密码 linkLabel llbl 超链接标签框
public pub 公共的 dialog dlg 对话框
reference ref 引用 scrollIndicator scrlindic 滚动指示器
source src
string str 字符串
summation sum
synchronization sync 同步
system sys 系统
table tbl 表格
temporary tmp 临时
text txt 文本
variable var 变量
addition add 加法/添加
argument arg 实参
array arr 数组
calculate calc 计算
configuration config 配置
column col
control ctrl 控制
hexadecimal hex 十六进制
original orig 原件
return rtn 返回
repeat rpt 重复
signal sig 信号
status stat 状态
stack stk 栈区
standard std 标准
trigger trig 触发
background bg 背景
escape esc 退出
user usr 用户
list lst 列表
server srv 服务
manager mgr 管理者
insert ins 插入
point pt
function func 函数
back bk 返回
break brk 间断
data dat 日期
edit edt 编辑
flag flg 标志
grid grd 网格
increment inc 增量
length len 长度
oracle ora 甲骨文数据库
panorama pano 全景
print prn 打印
program prg 程序
statistic stat 统计
administrator adm 管理员
database db 数据库
change chg 改变
click clk 点击
compare cmp 比较
coordinates coord 坐标
copy cpy 复制
current cur 当前的
dictionary dict 字典
display disp 显示
driver drv 驱动
extend ex/ext 扩展
frame frm 框架/帧
index idx / ndx 索引
horizontal horz 水平
instance ins 实例
increase inc 增加
link lnk 链接
middle mid 中间
multiply mul
resource res 资源
select sel 选择
test tst 测试
vertical vert 垂直

3、参考资料

变量命名规范

Google开源项目风格指南--C++风格指南

Google开源项目风格指南--ObjectiveC风格指南

常见编程命名缩写

变量常用缩写

C Primer Plus

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容

  • 推荐文章:禅与 Objective-C 编程艺 前言 为􏰀高产品代码质量,指导广大软件开发人员编写出简洁、可维护、...
    WolfTin阅读 2,737评论 0 1
  • 在日常的开发过程中,如果大家都遵循统一的代码规范,我们就可以避免许多无缘无故的Bug,提高程序的准确性、连续性、可...
    xqqlv阅读 1,157评论 0 1
  • 代码格式 使用空格而不是制表符 Tab 不要在工程里使用 Tab 键,使用空格来进行缩进。在 Xcode > Pr...
    small_Sun阅读 1,337评论 1 3
  • 转载自:『博爱』 Objective-C-Coding-Guidelines-In-Chinese 概要 Obje...
    王_尧阅读 1,181评论 0 2
  • Objective-C Coding Guidelines In Chinese Objective-C编码规范,...
    爨乡的云阅读 487评论 0 0