嵌入式代码的规范性之排版

简介: 嵌入式代码的规范性之排版

简介:

对于代码的规范性不管是做纯软件开发的还是做嵌入式开发的或者使用各种语言的,都是非常重要的。代码的规范性对编写人员对代码后期的维护以及其他开发人员阅读等都是非常友好的。接下来我们会对代码的规范性进行说明(当然,根据个人的情况和企业的不同可能要求不一样,我就根据我个人的一个情况进行一些说明,本专题不作为最终范本,仅用来作为参考)

排版问题

本篇就说说代码的排版问题,这东西就像家里装修一样,好的装修会让人心里很舒服,同样代码也是如此,一个好的代码排版也会给别人带来一个好的感觉。

程序的缩进

代码尽量采用缩进风格(特别是程序块)缩进空格为4个

对待吗的有关结构、函数、分支、循环、以及枚举等复杂或较为复杂的程序结构在进行编写的时候,要将它的内容缩进 一层。

比如大括号({}):大括号是一个非常明显的标志,凡是遇到大括号,都应该直接联想到缩进。

分支结构: 包括 ifelse 结构、switch 结构等

循环结构:包括 for 结构、while/dowhile 结构等

以上这些都需要进行缩进。

下面举个例子:

if语句


1if (a > b)
 2{
 3  /*if 子句的结构体内容应缩进*/
 4  max = a;
 5  min = b;
 6}
 7else
 8{
 9  /*else子句的结构体内容应缩进*/
10  max = b;
11  min = a;
12}


switch


1  switch (expression)
 2  {
 3    /*switch结构的内层缩进(也包括内容)*/
 4    case 0:
 5      break;
 6    case 1:
 7      /*case的内层(内容)也要缩进*/
 8      break;
 9    default:
10      break;
11  }

for语句

1for (size_t i = 0; i < count; i++)
2{
3  /*for循环缩进*/
4  data[i + 1] = data[i];
5}


while语句

1while (i != 0)
2{
3  /* 内容缩进 */
4  tx = yx;
5  x++;
6}

函数


1void RCC_Configuration(void)
 2{
 3  /* Enable GPIO clock */
 4  RCC_APB2PeriphClockCmd(USARTy_GPIO_CLK | USARTz_GPIO_CLK | RCC_APB2Periph_AFIO, ENABLE);
 5
 6#ifndef USE_STM3210C_EVAL
 7  /* Enable USARTy Clock */
 8  RCC_APB2PeriphClockCmd(USARTy_CLK, ENABLE);
 9#else
10  /* Enable USARTy Clock */
11  RCC_APB1PeriphClockCmd(USARTy_CLK, ENABLE);
12#endif
13  /* Enable USARTz Clock */
14  RCC_APB1PeriphClockCmd(USARTz_CLK, ENABLE);
15}

这里就不一一列举了,总之代码缩进空格数4。

代码语句过长要变短

如果代码语句过长要多行书写(比如>100个字符这样)

如果代码语句过长或者较长(比如:>100字符)要进行多行编写,对于长的表达式,要在操作符处进行换行,操作符尽可能的放在新的一行首位,同时要对新行进行适当的缩进,使代码排列整齐,整体美观可读性好。

举例

1int example(void)
2{
3  int my_Value=1;
4  /*这是一个很长的语句,所以我们来进行新行,从第二行开始进行一个缩进*/
5  my_Value=my_Value+my_Value1+my_Value2+my_Value3+my_Value5+my_Value
6           +my_Value8+my_Value9+my_Value10;
7  /*后面的就是恢复正常的缩进位置*/
8  my_Value = 100;
9}


对于循环、判断等语句中若有较长的表达式或语句,同样要进行适当的语句划分,同样换新行,在新行中表达式操作符要放在首位,然后进行缩进。

举例


1int example(void)
2{
3  if ((expression < USART_GetFlagStatus(USARTz, USART_FLAG_RXNE))
4      && (USART_GetFlagStatus(USARTz, USART_FLAG_RXNE)))
5  {
6    ... /* code*/
7  }
8}

同样对于函数参数也是一样的,都要进行适当的进行新行,同时也要适当的进行缩进,让代码整齐,是可读性不受干扰。

举例


1void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct,
2              RCC_APB2PeriphResetCmd* GPIO_InitStruc)
3


当有多个短语句的时候

不要把多个短语句写入到一行中

也就是说,不管一条语句有多短,都要一行只能写一条短语句。

多个短语句写一行并没有错,但是会让人很自动的认为那只有一条语句,因此应该是多个语句多行书写。

例如:

举例


1int example(void)
2{
3  /*这是不规范的*/
4  led.b = 0;  led.aa = 0;
5  /*应该写成下面这样*/
6  led.b = 0;
7  led.aa = 0;
8}



对分支语句、循环语句中{}的来说


iffordowhilecaseswitchdefault等所有的语句都要自占一行,并且iffordowhile、if--else等语句的执行语句部分无论多少都要加括号{},同时大括号{},都要独占一行

举例


1int example(void)
 2{
 3  /*下面就是不规范的*/
 4  if (i == 0)
 5    a = b;
 6  else
 7    b = e;
 8
 9  /*正确的写法*/
10  if (i == 0)
11  {
12    a = b;
13  }
14  else
15  {
16    b = e;
17  }
18}

1int example(void)
 2{
 3  /*下面是不规范的*/
 4  for (...){
 5    ... /* program code */
 6  }
 7  /*下面是规范的*/
 8  for ()
 9  {
10    /* code */
11  }
12}


这里推荐大家写代码的时候使用VScode或者其他具有自动缩进方式的IDE。

相关文章
|
1月前
|
存储 Rust 监控
Rust代码编写高性能屏幕监控软件的核心算法
本文介绍了使用Rust编写的高性能屏幕监控软件的实现方法。核心算法包括:1) 使用`image`和`winit`库捕获并转换屏幕图像;2) 对图像进行处理,检测特定对象或活动;3) 利用Rust的并发性并行处理多个帧以提高效率;4) 提取数据后,通过`reqwest`库自动提交到网站进行分析或存储。通过结合Rust的高性能和丰富的库,可构建满足各种需求的高效屏幕监控工具。
132 5
|
自然语言处理 JavaScript 前端开发
Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
Duktape是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性。 Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用Duktape API从C代码中,调用ECMAScript代码的功能,反之亦然。
1161 0
|
1月前
|
人工智能 前端开发 JavaScript
【前端设计】HTML+CSS+JavaScript基本特性
【前端设计】HTML+CSS+JavaScript基本特性
|
1月前
|
存储 编译器 C++
嵌入式中C++ 编程习惯与编程要点分析
嵌入式中C++ 编程习惯与编程要点分析
26 1
|
1月前
|
算法 小程序 Linux
如何写出高效清晰的嵌入式C程序
如何写出高效清晰的嵌入式C程序
25 0
|
1月前
|
算法 小程序 Linux
如何编写高效清晰的嵌入式C程序
如何编写高效清晰的嵌入式C程序
16 0
|
1月前
|
Shell 调度 Android开发
一款提高嵌入式代码质量的工具
一款提高嵌入式代码质量的工具
49 0
|
1月前
|
网络协议 安全 编译器
嵌入式代码经常产生bug的五大原因
嵌入式代码经常产生bug的五大原因
33 0
|
1月前
|
并行计算 搜索推荐 图形学
推荐五款简洁而实用的工具,值得你尝试
分享快乐是生活中美好的瞬间,而分享简单巧妙的工具也能令我愉悦。这五款工具简洁而实用,值得你尝试。
53 0
|
9月前
谈谈嵌入式应用软件人机界面开发的菜单框架编写
谈谈嵌入式应用软件人机界面开发的菜单框架编写
67 0