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


相关文章
|
6月前
|
存储 算法 C++
Windows共享文件:探秘C++实现的B树索引算法奇境
在数字化时代,Windows共享文件的高效管理至关重要。B树算法以其自平衡多路搜索特性,在文件索引与存储优化中表现出色。本文探讨B树在Windows共享文件中的应用,通过C++实现具体代码,展示其构建文件索引、优化数据存储的能力,提升文件检索效率。B树通过减少磁盘I/O操作,确保查询高效,为企业和个人提供流畅的文件共享体验。
|
5月前
|
安全 前端开发 Linux
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
168 3
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
|
5月前
|
Web App开发 人工智能 JSON
Windows版来啦!Qwen3+MCPs,用AI自动发布小红书图文/视频笔记!
上一篇用 Qwen3+MCPs实现AI自动发小红书的最佳实践 有超多小伙伴关注,同时也排队在蹲Windows版本的教程。
732 1
|
9月前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
343 77
|
7月前
|
固态存储 C++ 计算机视觉
Windows平台GIMP 2.10下载教程:零基础入门高级图像编辑
GIMP(GNU Image Manipulation Program)是一款开源跨平台图像编辑工具,支持图层管理、高级修图、色彩校正等功能,广泛应用于平面设计和照片修复。其优势包括全功能免费、插件生态丰富(600+扩展插件)、硬件要求低(1GB内存即可流畅运行)。本文详细介绍GIMP的软件定位、安装流程、首次配置及常见问题解答,帮助用户快速上手并充分利用其强大功能。
|
9月前
|
存储 C++
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
【数据结构——树】哈夫曼树(头歌实践教学平台习题)【合集】目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果:任务描述 本关任务:编写一个程序构建哈夫曼树和生成哈夫曼编码。 相关知识 为了完成本关任务,你需要掌握: 1.如何构建哈夫曼树, 2.如何生成哈夫曼编码。 测试说明 平台会对你编写的代码进行测试: 测试输入: 1192677541518462450242195190181174157138124123 (用户分别输入所列单词的频度) 预
198 14
【C++数据结构——树】哈夫曼树(头歌实践教学平台习题) 【合集】
|
9月前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
248 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
|
9月前
|
算法 C++
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】 目录 任务描述 相关知识 测试说明 我的通关代码: 测试结果: 任务描述 本关任务:实现二叉排序树的基本算法。 相关知识 为了完成本关任务,你需要掌握:二叉树的创建、查找和删除算法。具体如下: (1)由关键字序列(4,9,0,1,8,6,3,5,2,7)创建一棵二叉排序树bt并以括号表示法输出。 (2)判断bt是否为一棵二叉排序树。 (3)采用递归方法查找关键字为6的结点,并输出其查找路径。 (4)分别删除bt中关键
210 11
【C++数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
|
9月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
175 19