[笔记]c++Windows平台代码规范(上)

简介: [笔记]c++Windows平台代码规范

前言

微软风格=匈牙利风格=函数大驼峰+变量小驼峰+标明类型 例如InitTool(), mIsOpen, bOpen等

谷歌偏c风格 下划线很多 谷歌风格linux使用比较多,例如init_tool(),m_is_open, is_open等

1.文件结构

1.1 版权和版本的声明

文件头 全使用英文 减少中文编码乱码问题

/****************************************************************
* Copyright (c) 2021 by XXX Company
* 
* file description:Export To Be DLL Implement
* version:    1.0.0
* author:     Shiver
* time:       2021 / 05 / 31
****************************************************************/

1.2 导出头文件命名 XXXAPI.h

项目名+API+.h 作为导出dll 的对应头文件 统一格式方便查找

1.3 常见项目结构

-ProjectName
--src
--include
--lib
--bin
--res

src 目录 存源码包括(*.cpp、*.h,*.cc,*.hpp)

include 目录 存引入第三方库的 *.h文件

lib 目录 存引入第三方库的*.lib、*.a 、*.so (静态库和动态链接库)

bin 目录 存引入第三方库的*.dll (动态库)

res 目录 存资源文件 例如*.jpg、*.icon

1.4 头文件 防止重复引入

#ifndef XXX_H
#def XXX_H
// 主要内容
#endif 

注:尽量不要使用#pragram once,不利于跨平台 貌似只有windows有这个宏

1.5 导出接口命名

格式:

返回类型+“ ”+公司简称+“_”+模块简称+“_"+函数名(动+宾结构)+“(”+形参列表+“)”;

例如:

int ByteDance_Decoder_CreateDecoder(int a, int b);

当然导出的接口 自然有一些导出宏之类的 WINAPI 、extern "C"等 记得定义为宏 统一添加

1.6 类和虚类命名

类(Class)以C开头,例如CFactory

虚类(接口Interface)以I开头,例如IFactory

2.参数命名

2.1 局部变量

int: nXXX iXXX

指针:pXXX

char数组:szXXX

wchar_t数组:wszXXX

2.2 静态变量

s:static 静态变量

int:s_iXXX

2.3 全局变量

g:glogbal 全局变量

int: g_iXXX;

2.4 成员变量

m:member 成员

int:m_iXXX

变量类型 该类型变量的前缀 类型意义
局部变量 例如 int类型 nXXX
静态变量 s_ 例如 int类型 g_iXXX
全局变量 g_ 例如 int类型 g_iXXX
成员变量 m_ 例如 int类型 m_iXXX

2.5 常见变量命名

表一 基本类型及前缀规范

类型名定义 该类型变量的前缀 类型意义
int8_t n 有符号的8bit整数
uint8_t n 无符号的8bit整数
int16_t n 有符号的16bit整数
uint16_t n 无符号的16bit整数
int32_t n 有符号的32bit整数
uint32_t n 无符号的32bit整数
int64_t n 有符号的64bit整数
uint64_t n 无符号的64bit整数
void v void类型
float32 f 32位浮点数
float64
double f 64位浮点数
FILE* pf 文件指针
char*
char[] sz 字符指针,或者字符数组
char ch 字符
wchar wch 宽字符
wchar*
wchar[] wsz 宽字节数组
string str 字符串
wstring wstr 宽字符串
vector vec vector容器
list list list容器
map map map容器
HANDLE h 句柄
thread h 线程句柄
DWORD dw 双字
WORD w 单字
bool/BOOL b 布尔变量
函数指针 pfunc 函数指针
迭代器 itr 容器迭代器

表2 变量属性公共前缀规则

前缀 前缀意义
arr 数组类型变量
p 指针类型变量
t 自定义类型变量(自定义类型包括结构、联合、枚举型)
ap 存放指针的数组
at 存放自定义类型变量的数组
pa 指向数组的指针
pp 指向指针的指针变量(两维指针)
pt 指向自定义类型的指针变量

2.6 形参和实参命名

形参 最好能标识方向以及参数安全,避免被修改

输入形参:void test(int nInParam);

void test(const type *nInParam); //有时传只能是避免结构体拷贝过于消耗性能,所以此时要注意参数安全,避免函数调用完后参数被修改。

输出形参:void test(int &nOutParam);

3.函数命名

3.1 大驼峰命名

void ThisIsFunction();

3.2 动词+名词 结构

全局函数的名字应当使用“动词”或者“动词+名词”(动宾词组)。

例如:
InitModule()
SetHeight()
StartAction()
StopAction()
DestoryModule()

类的成员函数应当只使用“动词”,被省略掉的名词就是对象本身。

class Shoes {
   void Wear(); // wear the shoes
   void TakeOff(); // take off the shoes
   void Drop(); // drop the shoes
}

3.3 单个对象用 is has, 多个对象的集合用复数形态

比如

deleteFile,moveFiles,getChildren,单数复数表达的含义是不同的,file表示操作单个文件,files表示可以接受文件集合,children表示子节点不止一个。

3.4 用时态语态可以传达更多信息,增强可读性。

对于正在发生的事情用进行时,doing;

对于一个做完的事情用过去式 did done。比如当状态发生变化的时候,

对于正在改变但是还没彻底变完,xxxChanging,

对于已经变了 xxxChanged 表示真的变了。


相关文章
|
2月前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
244 4
|
3月前
|
监控 Windows
Windows平台RTSP|RTMP播放器如何实时调节音量
我们在做Windows平台RTSP、RTMP播放器的时候,有这样的技术需求,特别是多路监控的时候,并不是每一路audio都需要播放出来的,所以,这时候,需要有针对音量调节的设计
|
2月前
|
监控 Ubuntu Linux
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
这篇文章介绍了如何在Ubuntu和Windows系统中通过设置相同的时区并使用ntp服务来解决时间同步问题。
73 4
视频监控笔记(五):Ubuntu和windows时区同步问题-your clock is behind
|
2月前
|
NoSQL Shell MongoDB
Windows 平台安装 MongoDB
10月更文挑战第10天
55 0
Windows 平台安装 MongoDB
|
3月前
|
监控 C# 块存储
Windows平台RTSP|RTMP播放器如何叠加OSD文字
做Windows平台RTSP|RTMP播放器的时候,特别是多路播放场景下,开发者希望可以给每一路RTSP或RTMP流添加个额外的OSD台标,以区分不同的设备信息(比如添加摄像头所在位置),本文主要探讨,如何动态添加OSD台标。
Windows平台RTSP|RTMP播放器如何叠加OSD文字
|
3月前
|
Linux Android开发 iOS开发
Windows平台RTSP|RTMP播放器如何实现实时录像功能
Windows平台RTSP、RTMP播放器实时录像接口设计,实际上,除了Windows平台,我们Linux、Android、iOS平台也是一样的设计,单纯的录像模块,如果做的全面,也不是一两个接口可以搞定的
|
2月前
|
并行计算 开发工具 异构计算
在Windows平台使用源码编译和安装PyTorch3D指定版本
【10月更文挑战第6天】在 Windows 平台上,编译和安装指定版本的 PyTorch3D 需要先安装 Python、Visual Studio Build Tools 和 CUDA(如有需要),然后通过 Git 获取源码。建议创建虚拟环境以隔离依赖,并使用 `pip` 安装所需库。最后,在源码目录下运行 `python setup.py install` 进行编译和安装。完成后即可在 Python 中导入 PyTorch3D 使用。
236 0
|
3月前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
|
3月前
|
C++
2合1,整合C++类(Class)代码转换为MASM32代码的平台
2合1,整合C++类(Class)代码转换为MASM32代码的平台
|
4月前
|
C++ 容器
【C/C++笔记】迭代器
【C/C++笔记】迭代器
27 1