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

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

简介:

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

排版问题

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

程序的缩进

代码尽量采用缩进风格(特别是程序块)缩进空格为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。

相关文章
|
自然语言处理 JavaScript 前端开发
Duktape:一个新的小巧的超精简可嵌入式JavaScript引擎
Duktape是一个可嵌入的Javascript引擎,主要关注便携性和精简及紧凑性。 Duktape很容易集成到C/C++项目: 添加duktape.c和duktape.h到您的build中,并使用Duktape API从C代码中,调用ECMAScript代码的功能,反之亦然。
1409 0
|
6月前
|
设计模式 并行计算 算法
代码之韵:高效编程的艺术深入理解软件自动化测试框架的设计与实现
【5月更文挑战第29天】在数字世界的构建中,编程不仅仅是一门科学,更是一种艺术。本文将探讨如何通过理解编程的本质、掌握设计模式、运用算法智慧以及持续的性能优化过程,来提升编程效率和代码质量。我们将从宏观的架构设计到微观的代码细节,剖析那些让代码更加优雅、高效且易于维护的技巧与实践。
|
6月前
|
存储 编译器 C++
嵌入式中C++ 编程习惯与编程要点分析
嵌入式中C++ 编程习惯与编程要点分析
53 1
|
6月前
|
算法 小程序 Linux
如何写出高效清晰的嵌入式C程序
如何写出高效清晰的嵌入式C程序
33 0
|
6月前
|
算法 小程序 Linux
如何编写高效清晰的嵌入式C程序
如何编写高效清晰的嵌入式C程序
26 0
|
6月前
|
Shell 调度 Android开发
一款提高嵌入式代码质量的工具
一款提高嵌入式代码质量的工具
70 0
|
6月前
|
敏捷开发 设计模式 Unix
嵌入式C语言代码的基本编写规范要求
嵌入式C语言代码的基本编写规范要求
146 0
|
6月前
|
网络协议 安全 编译器
嵌入式代码经常产生bug的五大原因
嵌入式代码经常产生bug的五大原因
72 0
谈谈嵌入式应用软件人机界面开发的菜单框架编写
谈谈嵌入式应用软件人机界面开发的菜单框架编写
98 0
|
编译器
嵌入式代码的规范性之注释
嵌入式代码的规范性之注释