首页 > 其他分享 >代码规范整理

代码规范整理

时间:2023-12-29 19:33:39浏览次数:28  
标签:case 代码 printf 规范 else break 使用 整理

断言使用

#ifndef DEBUG_MODE

#define assert(expression) ((void)0)

#endif 

swicth 编写规范

#define UNREACHABLE() assert(0)

enum Day {
  MONDAY,
  TUESDAY,
  WEDNESDAY,
  THURSDAY,
  FRIDAY,
  SATURDAY,
  SUNDAY
};

void printDayName(enum Day day) {
  switch (day) {
    case MONDAY: {
      printf("Monday\n");
      break;
    }
    case TUESDAY: {
      printf("Tuesday\n");
      break;
    }
    case WEDNESDAY: {
      printf("Wednesday\n");
      break;
    }
    case THURSDAY: {
      printf("Thursday\n");
      break;
    }
    case FRIDAY: {
      printf("Friday\n");
      break;
    }
    case SATURDAY: {
      printf("Saturday\n");
      break;
    }
    case SUNDAY: {
      printf("Sunday\n");
      break;
    }
    default: {
      printf("Invalid day\n");
      // UNREACHABLE();
    }
  }
}
  1. 每个case语句块使用花括号包裹代码块。
  2. 每个case块都以break语句终止,确保不会出现fall-through
  3. default语句块包含一个注释,说明这种情况是无效的。
  4. 可以使用UNREACHABLE()宏来表示default语句块是不可达的(注释掉了)。

min 和 max 宏的使用

define MIN(a, b) (((a) < (b)) ? (a) : (b))

define MAX(a, b) (((a) > (b)) ? (a) : (b))

注意使用括号保证优先级

三元表达式

int max = (a > b) ? a : b;

for循环规范

Google 代码规范对于 for 循环的写法提供了以下建议:

  1. 使用范围式 for 循环(range-based for loop)来遍历容器或序列,例如使用 for (const auto& element : container) 的形式。
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (const auto& number : numbers) {
    // 使用 number 进行操作
}
  1. 如果需要使用索引进行迭代,可以使用传统的 for 循环,并使用 size_t 类型的索引变量。
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (size_t i = 0; i < numbers.size(); ++i) {
    // 使用 numbers[i] 进行操作
}
  1. 对于不需要使用循环变量的情况,可以使用 _ 作为循环变量名。
std::vector<int> numbers = {1, 2, 3, 4, 5};
for (const auto& _ : numbers) {
    // 不使用循环变量
    // 可以使用 _ 进行占位,表示循环变量不被使用
}

函数注释

Google 的代码规范非常强调代码的可读性和一致性。对于函数注释,Google 提供了一套详细的指南,特别是在其开源项目样式指南中。以下是根据 Google C++ 风格指南中的建议,编写函数注释的一个示例:

/**
 * Brief description which ends at this dot.
 *
 * Longer description which may extend over multiple lines. This starts with a
 * brief description which may be just one sentence or a couple of sentences.
 * Then there can be additional paragraphs if needed. They should be separated
 * by blank lines.
 *
 * @param[in]  param1    Description of the first parameter.
 * @param[out] param2    Description of the second parameter which is passed by reference and modified by the function.
 * @param[in]  param3    (Optional) Description of the third parameter which has a default value.
 * @return               Description of the return value.
 * @throws               Description of any exceptions that can be thrown.
 */
ReturnType FunctionName(Type param1, Type& param2, Type param3 = DefaultValue);

在这个例子中,注释包括以下部分:

  • 简短描述:在第一行简洁地描述函数的作用,以一个句号结尾。
  • 详细描述:如果需要,可以提供更详尽的描述,可能包括函数的行为、特殊的算法细节、使用注意事项等。
  • 参数:使用 @param 标签来描述每个参数。[in] 表示输入参数,[out] 表示输出参数。如果参数是可选的,应该明确指出并描述默认值。
  • 返回值:使用 @return 标签来描述函数返回值的类型和意义。
  • 异常:使用 @throws@exception 标签来描述函数可能抛出的异常类型和原因。

请注意,不同的编程语言可能有不同的注释风格,Google 为 Python、Java、JavaScript 等语言也提供了风格指南。在实际编写代码时,应该参考使用的编程语言和项目中采用的具体风格指南。

注释常用标签

在代码注释中,尤其是在使用Doxygen、Javadoc、Sphinx等文档生成工具时,开发者会使用特定的标签(或称为注解)来提供结构化的信息。这些标签通常以@#开始,它们帮助工具生成格式化的文档,标识参数、返回值、异常等。以下是一些常用的标签:

  1. @param@arg:描述一个函数的参数。
  2. @return@returns:描述函数的返回值。
  3. @throws@exception:描述函数可能抛出的异常。
  4. @see:提供与当前代码相关的其他代码或文档的引用。
  5. @todo:标记代码中待完成的任务。
  6. @deprecated:标记不再推荐使用的代码元素。
  7. @brief:提供一个简短的摘要或描述。
  8. @details:提供关于代码的详细信息。
  9. @author:标记代码的原始作者。
  10. @date:标记代码编写或修改的日期。
  11. @version:标记代码的版本。
  12. @since:指示何时添加了特定的功能。
  13. @note:提供重要的注释。
  14. @warning:提醒用户注意代码中的潜在问题。
  15. @file:在文件级注释中描述整个文件的作用。

if else if 编写规范

Google 的代码规范对于 ifelse ifelse 语句的编写有明确的格式要求,这些要求旨在保持代码的清晰性和一致性。以下是根据 Google C++ 风格指南提供的 ifelse ifelse 语句的格式示例:

if (condition) {
  // Do something when condition is true.
} else if (another_condition) {
  // Do something else if another condition is true.
} else {
  // Do something when none of the above conditions are true.
}

注意以下几点:

  • if 后面的条件表达式两边不加空格。
  • 条件表达式后的左大括号 {ifelse 在同一行。
  • else ifelse 关键字在新的一行,并与前面的关闭大括号 } 对齐。
  • 每个代码块(即每个条件下的执行语句)都被大括号 {} 包围,即使它只有一条语句。
  • 代码块的内容缩进一级(通常是两个空格)。

Google 风格指南还推荐在可能的情况下,使用条件运算符(?:)来替代简单的 if-else 语句,以提高代码的简洁性。但是,如果 if-else 语句过于复杂或条件运算符会使代码难以阅读,应该避免使用条件运算符。

标签:case,代码,printf,规范,else,break,使用,整理
From: https://www.cnblogs.com/lhclqslove/p/17935578.html

相关文章

  • Meta3D -- 开源的Web3D低代码平台
    大家好,Meta3D是开源的Web3D低代码平台,快速搭建Web3D编辑器,共建开放互助的web3d生态Github进入平台功能演示加入UIControl加入Action脚本运行“完整的编辑器”模板Meta3D的开发历程我之前用了4年多的时间开发过Wonder:WebGL3D引擎和编辑器,它可以看作是Web版的Unity,对......
  • 代码cr总结
    1.前端开发过程中,有的样式没法生成,加入/deep后样式成功渲染,为什么,用这个deep有什么注意点嘛在前端开发中,如果你发现某些样式没有被正确应用,并且使用了/deep/或::v-deep(视具体框架而定)后样式成功渲染,这通常是因为你遇到了CSS作用域问题,特别是在使用Vue......
  • 数据结构实验代码分享 - 4
    迷宫与栈问题(图的应用)【问题描述】以一个m*n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。输入:行列迷宫,0表示无障碍,1表示有障碍输出:一条Path或“NOPATH” 注:参考了《数据结......
  • 《整机柜服务器通用规范》由OCTC正式发布!浪潮信息牵头编制
    近日,中国电子工业标准化技术协会开放计算标准工作委员会(OCTC)正式批准发布了《整机柜服务器通用规范》,该标准由浪潮信息牵头,中国工商银行、中国质量认证中心、英特尔、中国计量科学研究院等十余家单位联合编制,是首个面向通用市场建立的整机柜服务器标准,对推动整机柜服务器实现全产业......
  • 【代码分享】10行代码写一个超级简单的进度条
    我们知道,Python使用rich或tqdm模块可以轻松创建进度条,那么如果我们自己写一个,需要几行代码呢?答案是4行。显示效果完整代码完整代码如下,核心代码也就4行#!/usr/bin/envpython#-*-coding:UTF-8-*-importtimedefprogress_bar(desc:str,index:int,total:int,b......
  • day02 代码随想录算法训练营 977. 有序数组的平方
    题目:977. 有序数组的平方我的感悟:这道题,仔细观察,平方后两头的大。用双指针,取两头,放到新的数组里。新数组要求排序所以,新的数组从后往前放理解难点:无他,多练习。代码难点:无总结概括:双指针代码示例:classSolution:defsortedSquares(self,nums:List[in......
  • Vscode 配置ssh实现用vscode直接看远程服务器代码
    1、下载vscode插件下载RemoteDevelopment插件2、配置ssh文件安装完成后,在左边有对应插件,设置config的配置文件 3、ctrl+shift+p:选择Remote-SSH,确认后选择刚才配置的文件4、此时会打开一个新的窗口,按照提示一步一步执行,一般输入密码,校验成功后会提示连接到远程,选择打开......
  • 数据结构实验代码分享 - 3
    哈夫曼编码/译码系统(树应用)[问题描述]任意给定一个仅由26个大写英文字母组成的字符序列,根据哈夫曼编码算法,求得每个字符的哈夫曼编码。要求:1)输入一个由26个英文字母组成的字符串,请给出经过哈夫曼编码后的编码序列及其编码程度。(编码)2)采用上一问题的哈夫曼编码,给定一串编......
  • 常用代码模板自用
    导入库(用于深度学习)importosimporttimefromdatetimeimporttimedeltaimportjsonimportyamlfromtqdmimporttqdmimportnumpyasnpimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFfromtorch.utils.dataimportDataLoader 绘图(用于......
  • day01 代码随想录算法训练营 27. 移除元素
    题目:27.移除元素感悟:用快慢指针。本题是要原地删除。而删除这个行为在真实的计算机的数组里,是覆盖。所以,就用两个指针,(人)一个跑的快,一个跑的慢。他们身上带了个对讲机。跑的快的那个人负责检测后面的数字符合要求不,比如,要不等于3的,遇到一个2,告诉跑的慢的说2符合要求。遇......