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

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

4.代码编写原则

4.1 【内存申请原则】谁创建谁释放,平级作用域内释放

{
  int *pNum = new int();
  {
    int *pNum2 = new int();
    delete pNum2;
  }
  delete pNum;
}

4.2 【结构体初始化原则】在创建结构体前/构造函数中初始化值

struct test
{
  int a;
  int b;
  test(){
   a = 0;
   b = 0;
  }
}
struct test testa;
memset(testa,0,sizeof(testa));

声明初始化以及构造初始化 有利于避免野指针。

4.3 【函数实现原则】引用作为形参时,不能改变形参内容

禁止用法:

void func(std::string &name){
  name = "!23"
}

正确用法:

void func(const std::string &name){
}

4.4 【函数实现原则】函数传入的形参需要校验安全性和可用性!!!

验证参数可用性和安全性非常重要,以及处理对应的错误情况的处理方式 抛异常还是返回false都是决定软件的体验是否流畅

禁止用法:

void func(Point *p){
  use(p); // wrong
}

正确用法:

void func(Point *p){
if (p == nullptr)
{
  return
}
use(p); // right
}

4.5 【日志打印写法】使用format格式,诸如printf("%s),格式化风格,符号替换会操作比较单一,不会影响性能

4.6 【常用数值,避免硬编码】一些灵活多变的数值,比如定时刷新时间,最大值最小值这些尽量用可灵活设置的方法,比如宏定义,静态变量存储,避免写死在代码里(硬编码)

5.代码格式

5.1 一行只申明一个变量,且声明后马上初始化

错误范例:

int a,b,c;

正确范例:

int a = 0;
int b = 0;
int c = 0;
char *buffer = new char[260];
memset(buffer,0,260);

5.2 代码块之间用 多使用换行 分隔

错误范例:

int a;
int b;
int c;
if(b==2){
 ...
}

正确范例:

int a;
int b;
int c;
if(b == 2)
{
 ...
}

5.3 操作符与变量之间 多使用 空格 分隔

错误范例:

if(b==0){...}
a>b?0:1;

正确范例:

if(b == 0){
...
}
a > b ? 0 : 1;

5.4 判断语句和循环语句 内容必须用{}包裹

错误范例:

if(a==0) return a;
while(1) return 0;

正确范例:

if(a==0)
{
 ...   
}
while(1)
{
  return 0;
}

5.5 {}包裹的内容必须有层次感 通过一层一个tab

错误范例:

if(a==0)
{
while(1)
{
return 0;
}
return a;
}

正确范例:

if(a == 0) //1 层
{
  while(1) // 2层
  {
    return 0;//3 层
  }
  return a;//2层
}

5.6 编译器尽量设置 1个tab=4个空格

5.7 操作符和变量之间 必须用空格分割开来

a = b
test(a, b)

6.常见通俗规定

6.1 函数形参顺序 先dst,后src (可选)

void *memcpy(void *destin, void *source, unsigned n);

6.2 长循环放内部,短循环放外部

在多重循环中,如果有可能,应当将最长的循环放在最内层,最短的循环放在最外层,以减少CPU跨切循环层的次数。

例如示例1的效率比示例2的高。

示例1

for(int i = 0; i < 10;i++){
  printf("for out");
  for(int j = 0; j < 100;j++){
      printf("for in");
  }
}

示例2

for(int i = 0; i < 100;i++){
  printf("for out");
  for(int j = 0; j < 10;j++){
      printf("for in");
  }
}

6.3 使用const static 代替 #define (可选)

宏定义可减少一定内存开销,转移到代码段。

const static 会产生内存开销。

6.4 执行命令时 文件路径 记得用转义字符 \" \"圈起来路径

6.5 路径中的斜杠 默认使用反斜杠 /

windows  \\等于/
linux  /就是/

6.6 四个空格等于一个tab 但一般用4个空格 一个tab某平台等于8个空格

7.常见埋坑操作

7.1 文件路径

1.文件路径字符串请用""圈起来,避免有空格情况以及部分系统无法识别相关命令

2.文件路径字符串如果有中文请使用Unicode编码

7.2 注释中包含中文时,请在注释结尾使用英文句号,不然编译可能存在问题。

错误:

//测试

正确:

//测试.

或者

//
//测试
//

原因:使用中文一般文件就默认识别为多字节,多字节文件,会识别代码也为多字节,会读取多个字节为一个字符,导致代码编译出错。

8. 常用技巧

8.1 vs设置tab为4个空格

跨平台代码统一使用空格作为格式化代码的符号

8.2 文本换行采用unix LF 而非 windows CRLF

不然可能会有调试代码时 出现错行的问题,即源代码和debug断点位置没匹配上(断点错位,断点无效等)的问题

跨平台代码统一使用LF

调试代码错位时,可以试试更改文件编码为(utf-8带签名)

UTF-8有带签名和无签名

在VS中编码保存时,文件编码的选择里的UTF-8有带签名和无签名2种,那么到底有什么区别呢?

带签名即文件头含BOM信息,不带则没有。

带了的好处是,只要支持多编码的编辑器都能正确识别出文件编码。

不带的话,就不一定了,就有可能识别错别。

总之呢,这个BOM信息也就那么三字节,没必要省这么一点点空间,要用UFT-8就选带签名,这样就不会错了。

9. 英文缩写规则

英语缩写规则

  1. 采用去元音(a,e,i,o,u),比如 service=srvc, test=tst

总结

好的编程风格有利于快速理解代码,好的编码习惯也是编码的基本。


相关文章
|
4月前
|
监控 编译器 Windows
Qt5实现Windows平台串口通信
Qt5实现Windows平台串口通信
|
4月前
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
503 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
4月前
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
345 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
4月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
213 11
|
10月前
|
存储 算法 C++
Windows共享文件:探秘C++实现的B树索引算法奇境
在数字化时代,Windows共享文件的高效管理至关重要。B树算法以其自平衡多路搜索特性,在文件索引与存储优化中表现出色。本文探讨B树在Windows共享文件中的应用,通过C++实现具体代码,展示其构建文件索引、优化数据存储的能力,提升文件检索效率。B树通过减少磁盘I/O操作,确保查询高效,为企业和个人提供流畅的文件共享体验。
|
5月前
|
安全 Linux API
JEB Pro v5.31 (macOS, Linux, Windows) - 逆向工程平台
JEB Pro v5.31 (macOS, Linux, Windows) - 逆向工程平台
208 0
|
6月前
|
Unix Linux 编译器
解决在Windows平台上运行Golang程序时出现的syscall.SIGUSR1未定义错误。
通过这种结构,你的代码既可以在支持 SIGUSR1 信号的系统上正常工作,又可以在不支持这些信号的 Windows 系统上编译通过,确保跨平台的兼容性和功能的完整性。
264 0
|
Unix Linux iOS开发
Splunk Enterprise 10.0.0 (macOS, Linux, Windows) - 搜索、分析和可视化,数据全面洞察平台
Splunk Enterprise 10.0.0 (macOS, Linux, Windows) - 搜索、分析和可视化,数据全面洞察平台
185 0
|
9月前
|
安全 前端开发 Linux
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
267 3
Immunity CANVAS Professional 7.27 (macOS, Linux, Windows) - 渗透测试和漏洞利用平台
|
9月前
|
Web App开发 人工智能 JSON
Windows版来啦!Qwen3+MCPs,用AI自动发布小红书图文/视频笔记!
上一篇用 Qwen3+MCPs实现AI自动发小红书的最佳实践 有超多小伙伴关注,同时也排队在蹲Windows版本的教程。
1762 1