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

代码规范整理

时间:2024-01-03 14:05:00浏览次数:26  
标签: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://blog.51cto.com/u_15350078/9084336

相关文章

  • 89C51单片机实现五个步进电机和显示实时时钟和日历功能的代码
    为了实现五个步进电机和显示实时时钟和日历功能,我们需要使用89C51单片机、步进电机驱动模块、数码管显示模块和实时时钟模块。以下是一个简单的代码示例:#include<reg52.h>#include<intrins.h>//定义步进电机驱动模块的引脚sbitIN1=P1^0;sbitIN2=P1^1;sbitIN3=P1^......
  • JVS低代码轻应用可独立配置目录权限,让企业数据安全无忧!
    在数字化快速发展的今天,轻应用已成为企业高效运营的关键。然而,如何合理地配置轻应用的目录权限,以确保数据安全和业务流程的顺利进行,成为了企业必须面对的挑战。JVS低代码轻应用提供了目录权限配置。本文详细介绍轻应用目录权限的重要性、基本概念、配置方法和最佳实践。通过理解并......
  • 代码检查规则运营需关注的10大指标
    本文分享自华为云社区《代码检查规则运营一般会关注什么指标?》,作者:gentle_zhou。代码检查服务的度量运营看板,除了告警运营模块,必定还会存在的一个模块是规则运营。这个模块关注于对代码检查的规则进行分析、处理和汇报,对于团队项目管理者来说,可以监控和管理到规则的整体状况。往下......
  • 一行代码也不写,拿Github Copliot + DallE3做一个小游戏是什么体验?
    我全程没写一句代码...   乡村爱情15看完了,晚上也没什么事,就寻思折腾点事做,儿子问我小时候最爱玩什么游戏,我毫不犹豫的说1945,正好这个事情给了我一个brainstorming,那我自己写一个简单的1945可不可以?   说干就干,但是我也没写过游戏,于是我开启了GitHubCopliot...  ......
  • 贪吃蛇login.wxss代码
    /* pages/login/login.wxss *//**app.wxss**/.box1 {  height: 100%;  display: flex;  flex-direction: column;  align-items: center;  justify-content: space-between;  padding: 100rpx 0;  box-sizing: border-box;} image{  width: 150rpx; ......
  • 安卓期末大作业(AndroidStudio开发),垃圾分类app,代码有注释,能正常运行
    1 项目基本信息1.1 项目名称垃圾分类助手APP的设计与实现1.2开发运行环境开发语言:Java开发工具:AndroidStudio模拟器:雷电模拟器9数据库:SQLite  1.3使用的核心类及组件Activity:作为实现界面的窗体类BaseAdapter:适配器类SqliteOpenHelper:数据库类Intent:页面跳转传值Fragmen......
  • 安卓期末大作业(AndroidStudio开发),日记本app,代码注释详细,能正常运行
    安卓期末大作业-日记本app(附下载链接)压缩包内包含源代码,运行各个界面截图,一条日记可以记录2000字符以下的文本、最多8张配图和最多8个视频。每条日记都可以以评论的形式或转发引用的形式追更,评论的最大长度也是2000字符。日记还可以同时记录所处位置和当时的天气情况(当然,现在并......
  • 全网最新整理覆盖全平台电脑、手机的7个开源免费流媒体直播平台以及完整源码和文档
    全网最新整理覆盖全平台电脑、手机的7个开源免费流媒体直播平台以及完整源码和文档。如今上到太空站、下到在家养猪,各行各业都在直播。直播之所以如此盛行,就是因为其能够给粉丝观众亲临现场的感受,以及直播过程中所附带着巨大的经济效益。这种方式可以为无法亲自到场的人表演、分享......
  • 亚信安慧AntDB数据库:引领数据库标准与性能规范,推动行业创新
    近日,全国信息技术标准化技术委员会数据库标准工作组在一场重要的研讨会上召开,旨在交流并总结2023年上半年数据库标准编制情况。我国自主研发的AntDB数据库,作为国内最早的国产数据库产品之一,受邀参与了此次标准的研讨,为推动我国数据库领域的标准体系建设和性能测试规范制定贡献了积......
  • 轻松转换,一键搞定:JVS低代码平台的日期格式转换功能详解!
    日期和时间在我们的日常生活中起着至关重要的作用,无论是计划日程、管理项目还是执行其他任务,都需要精确的时间信息。在JVS低代码平台上,日期格式转换主要依赖于逻辑引擎中的函数公式。这些函数为我们的用户提供了一种强大且灵活的方式来处理和转换日期时间数据。我们的时间函数旨在......