From e000cd71d2cb40e6722a6940c103f0259c41be0c Mon Sep 17 00:00:00 2001 From: zoubing Date: Mon, 15 Jul 2024 15:25:08 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A6=96=E6=AC=A1=E6=8F=90=E4=BA=A4=EF=BC=8C?= =?UTF-8?q?=E5=BD=93=E5=89=8D=E7=8A=B6=E6=80=81=E4=B8=BAQt=E7=BC=96?= =?UTF-8?q?=E7=A0=81=E8=A7=84=E8=8C=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 编码规范.md | 258 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 258 insertions(+) create mode 100644 编码规范.md diff --git a/编码规范.md b/编码规范.md new file mode 100644 index 0000000..14eca49 --- /dev/null +++ b/编码规范.md @@ -0,0 +1,258 @@ +# 开发团队C++编码规范 + +- [开发团队C++编码规范](#开发团队c编码规范) + - [代码风格](#代码风格) + - [缩进](#缩进) + - [变量声明](#变量声明) + - [空白](#空白) + - [大括号](#大括号) + - [圆括号](#圆括号) + - [Switch 语句](#switch-语句) + - [断行](#断行) + - [继承与关键字 `virtual`](#继承与关键字-virtual) + - [通用例外](#通用例外) + - [附录A 参考列表](#附录a-参考列表) + +## 代码风格 + +### 缩进 + +* 采用4个空格 +* 空格,不要用TAB! + +### 变量声明 + +- 每行一个变量 +- 尽可能避免短的变量名(比如"a", "rbarr", "nughdeget") +- 单字符的变量只在临时变量或循环的计数中使用 +- 等到真正需要使用时再定义变量 + +``` c++ + // 错误示例 + int a, b; + char *c, *d; + + // 正确 + int height; + int width; + char *nameOfThis; + char '''nameOfThat; +``` + +- 以小写字符开头,后续单词以大写开头 +- 避免使用缩写 + +``` c++ + // 错误示例 + short Cntr; + char ITEM_DELIM = ''; + + // 正确 + short counter; + char itemDelimiter = ''; +``` + +- 类名总是以大写开头。公有类以Q开头(QRgb),公有函数通常以q开头(qRgb)。 + +### 空白 + +- 利用空行将语句恰当地分组 +- 总是使用一个空行(不要空多行) +- 总是在每个关键字和大括号前使用一个空格 + +``` c++ + // 错误示例 + if(foo){ + } + + // 正确 + if (foo) { + } + ``` + +- 对指针和引用,在类型和*、&之间加一个空格,但在*、&与变量之间不加空格 + +``` c++ + char *x; + const QString &myString; + const char''' const y = "hello"; +``` + +- 二元操作符前后加空白 +- 类型转换后不加空白 +- 尽量避免C风格的类型转换 + +``` c++ + // 错误示例 + char* blockOfMemory = (char* ) malloc(data.size()); + + // 正确 + char '''blockOfMemory = reinterpret_cast(malloc(data.size())); +``` + +### 大括号 + +- 基本原则:左大括号和语句保持在同一行: + +``` c++ + // 错误示例 + if (codec) + { + } + + // 正确 + if (codec) { + } + ``` + +- 例外:函数定义和类定义中,左大括号总是单独占一行: +``` c++ + static void foo(int g) + { + qDebug("foo: %i", g); + } + class Moo + { + }; + ``` + +- 控制语句的body中只有一行时不使用大括号 + +``` c++ + // 错误示例 + if (address.isEmpty()) { + return false; + } + + for (int i = 0; i < 10; +''i) { + qDebug("%i", i); + } + + // 正确 + if (address.isEmpty()) + return false; + + for (int i = 0; i < 10;i) + qDebug("%i", i); +``` + +- 例外1:如果父语句跨多行,则使用大括号 + +``` c++ + // 正确 + if (address.isEmpty() || !isValid() + || !codec) { + return false; + } +``` + +- 例外2:在if-else结构中,有一处跨多行,则使用大括号 + +``` c++ + // 错误示例 + if (address.isEmpty()) + return false; + else { + qDebug("%s", qPrintable(address)); +it; + } + + // 正确 + if (address.isEmpty()) { + return false; + } else { + qDebug("%s", qPrintable(address)); +it; + } + + // 错误示例 + if (a) + if (b) + … + else + … + + // 正确 + if (a) { + if (b) + … + else + … + } +``` + +- 如果控制语句的body为空,则使用大括号 + +``` c++ + // 错误示例 + while (a); + + // 正确 + while (a) {} +``` + +### 圆括号 + +- 使用圆括号将表达式分组 + + ``` c++ + // 错误示例 + if (a && b || c) + + // 正确 + if ((a && b) || c) + + // 错误示例 + a | b & c + + // 正确 + (a + b) & c + ``` + +### Switch 语句 + +- case 和 switch 位于同一列 +- 每一个case必须有一个break(或renturn)语句,或者用注释说明无需break + ``` c++ + switch (myEnum) { + case Value1: + doSomething(); + break; + case Value2: + doSomethingElse(); + // fall through + default: + defaultHandling(); + break; + } + ``` + +### 断行 + +- 保持每行短于100 个字符,需要时进行断行 +- 逗号放一行的结束,操作符放到一行的开头。如果你的编辑器太窄,一个放在行尾的操作符不容易被看到。 + // 正确 + if (longExpression + + otherLongExpression + + otherOtherLongExpression) { + } + +// Wrong + if (longExpression + + otherLongExpression + + otherOtherLongExpression) { + } +### 继承与关键字 `virtual` + +- 重新实现一个虚函数时,头文件中 不 放置 virtual 关键字。 + +### 通用例外 + +如果它使你的代码看起来不好,你可以打破任何一个规则 。 + +## 附录A 参考列表 + + 1. [Qt编码风格/Qt Coding Style](https://wiki.qt.io/Qt_Coding_Style) + 2. [LLVM编码标准/LLVM Coding Standards](https://llvm.org/docs/CodingStandards.html) + 3. [谷歌C++风格指南/Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html) + 4. [C++核心指南/Cpp Core Guidelines](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines) \ No newline at end of file