[笔记]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 表示真的变了。


相关文章
|
25天前
|
人工智能 机器人 编译器
【C++】Windows端VS code中运行CMake工程(手把手教学)
【C++】Windows端VS code中运行CMake工程(手把手教学)
|
3月前
|
缓存 网络协议 数据安全/隐私保护
[运维笔记] - (命令).Windows server常用网络相关命令总结
[运维笔记] - (命令).Windows server常用网络相关命令总结
191 0
|
3月前
|
存储 安全 网络安全
C++数字医学影像(pacs)平台源码
医学影像PACS系统源码,集成三维影像后处理功能,包括三维多平面重建、三维容积重建、三维表面重建、三维虚拟内窥镜、最大/小密度投影、心脏动脉钙化分析等功能。系统功能强大,代码完整。 PACS系统可实现检查预约、病人信息登记、计算机阅片、电子报告书写、胶片打印、数据备份等一系列满足影像科室日常工作的功能。
22 0
|
3月前
|
关系型数据库 MySQL 开发工具
windows编译poco c++库
windows编译poco c++库
|
20天前
|
人工智能 机器人 C++
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
【C++/Python】Windows用Swig实现C++调用Python(史上最简单详细,80岁看了都会操作)
|
1月前
|
Linux API C++
【C++ 线程包裹类设计】跨平台C++线程包装类:属性设置与平台差异的全面探讨
【C++ 线程包裹类设计】跨平台C++线程包装类:属性设置与平台差异的全面探讨
51 2
|
3月前
|
Unix 编译器 C语言
C++系列-附录-windows下安装C++环境
C++系列-附录-windows下安装C++环境
|
3月前
|
编解码 数据挖掘 异构计算
Windows平台实现超高分辨率或帧率硬编码
Windows平台实现超高分辨率或帧率硬编码
|
3月前
|
C# 数据安全/隐私保护 开发者
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
|
3月前
|
PyTorch 算法框架/工具 C++
windows上编译安装pytorch的c++扩展
windows上编译安装pytorch的c++扩展

热门文章

最新文章