简介:
对于代码的规范性不管是做纯软件开发的还是做嵌入式开发的或者使用各种语言的,都是非常重要的。代码的规范性对编写人员对代码后期的维护以及其他开发人员阅读等都是非常友好的。接下来我们会对代码的规范性进行说明(当然,根据个人的情况和企业的不同可能要求不一样,我就根据我个人的一个情况进行一些说明,本专题不作为最终范本,仅用来作为参考)
排版问题
本篇就说说代码的排版问题,这东西就像家里装修一样,好的装修会让人心里很舒服,同样代码也是如此,一个好的代码排版也会给别人带来一个好的感觉。
程序的缩进
代码尽量采用缩进风格(特别是程序块)缩进空格为4个
对待吗的有关结构、函数、分支、循环、以及枚举等复杂或较为复杂的程序结构在进行编写的时候,要将它的内容缩进 一层。
比如大括号({}):大括号是一个非常明显的标志,凡是遇到大括号,都应该直接联想到缩进。
分支结构: 包括 if…else 结构、switch 结构等
循环结构:包括 for 结构、while/do…while 结构等
以上这些都需要进行缩进。
下面举个例子:
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}
对分支语句、循环语句中{}的来说
if、for、do、while、case、switch、 default等所有的语句都要自占一行,并且if、for、do、while、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。