嵌入式C语言编程规范--排版与格式(个人规约)

版权声明:本文为博主原创文章,博主允许 可以转载。 https://blog.csdn.net/qq_39815416/article/details/79963114

1、相对独立的程序块之间、变量说明之后必须加空行;

 

if (!valid_ni(ni))
{
    // program code
    ...
}

//空行

repssn_ind = ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

2、在switch语句中,每一个case分支和default要用{}括起来,{}中的内容需要缩进。

正例:

switch(iCode)

{

    case1:

    {

        DoSomething();//缩进4格
        break;

    }

    case2:

    {    //每一个case分支和default要用{}括起来

        DoOtherThing();

        break;

    }

}

3、一元操作符如“!”、“~”、“++”、“--”、“*”、“&”(地址运算符)等前后不加空格。“[]”、“.”、“->”这类操作符前后不加空格

!bValue
~iValue
++iCount
*strSource
&fSum
aiNumber[i]=5;
tBox.dWidth
tBox->dWidth

4、多元运算符和它们的操作数之间至少需要一个空格

正例:
fValue = fOldValue;
fTotal + fValue
iNumber += 2;

5、关键字之后要留空格

说明:if、for、while等关键字之后应留一个空格再跟左括号‘(’,以突出关键字

6、函数名之后不要留空格

说明:函数名后紧跟左括号‘(’,以与关键字区别。

7、‘(’向后紧跟,‘)’、‘,’、‘;’向前紧跟,紧跟处不留空格。‘,’之后要留空格。‘;’不是行结束符号时其后要留空格。

8、注释符与注释内容之间要用一个空格进行分隔

/* 注释内容 */
// 注释内容

9、相关的赋值语句等号对齐

正例:
tPDBRes.wHead    = 0;
tPDBRes.wTail    = wMaxNumOfPDB-1;
tPDBRes.wFree    = wMaxNumOfPDB;
tPDBRes.wAddress = wPDBAddr;
tPDBRes.wSize    = wPDBSize;

10、程序的分界符‘{’和‘}’应独占一行并且位于同一列,同时与引用它们的语句左对齐。{}之内的代码块使用缩进规则对齐;

说明:这样使代码便于阅读,并且方便注释。

do while语句和结构的类型化时可以例外,while条件和结构名可与 } 在同一行;

void Function(uint_8 ucVar)
{//独占一行并与引用语句左对齐
  while(condition)
  {
    DoSomething();
  }
}

11、if、else、elseif、for、while、do等语句自占一行,执行语句不得紧跟其后。不论执行语句有多少都要加{};

说明:防止书写失误,也易于阅读。

if (v1 < v2)
{
  v1 = v2;
}

12、长表达式(超过80列)要在低优先级操作符处拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要进行适当的缩进,使排版整齐;

说明:条件表达式的续行在第一个条件处对齐。

for循环语句的续行在初始化条件语句处对齐。函数调用和函数声明的续行在第一个参数处对齐。赋值语句的续行应在赋值号处对齐。

if ((iFormat == CH_A_Format_M) && 
   (iOfficeType == CH_BSC_M) &&
   (aaaaa < bbbb))//条件表达式的续行在第一个条件处对齐
{
    DoSomething();
}

    for (long_initialization_statement;
        long_condiction_statement;//for循环语句续行在初始化条件语句处对齐
        long_update_statement)
    {
      DoSomething();
    }

//函数声明的续行在第一个参数处对齐
BYTEReportStatusCheckPara(HWNDhWnd,
                          BYTEucCallNo,
                          BYTEucStatusReportNo);

//赋值语句的续行应在赋值号处对齐
fTotalBill = fTotalBill+faCustomerPurchases[iID]
           + fSalesTax(faCustomerPurchases[iID]);

13、函数声明时,类型与名称不允许分行书写

  extern double FAR CalcArea(double dWidth, double
dHeight);

14、文件头部必须进行注释

说明:注释必须列出:版权信息、文件标识、内容摘要、版本号、作者、完成日期、修改信息等。

 

下面是文件头部的中文注释:

    /*********************************************************************

    *版权所有(C)2001,XXX股份有限公司。*

    *文件名称://文件名

    *文件标识://见配置管理计划书

    *内容摘要://简要描述本文件的内容,包括主要模块、函数及其功能的说明

    *其它说明://其它内容的说明*当前版本://输入当前版本*作者://输入作者名字及单位

    *完成日期://输入完成日期,例:2000年2月25日

    *修改记录1://修改历史记录,包括修改日期、修改者及修改内容

    *修改日期:*版本号:*修改人:*

    修改内容:*修改记录2:…

    **********************************************************************/

    下面是文件头部的英文注释:

    /***********************************************************************

    *Copyright(C)2011,XXXXXCorporation.*

    *FileName://文件名(注释对齐)*FileMark://见配置管理计划书

    *Description://简要描述本文件的内容,完成的主要功能

    *Others://其它内容的说明*Version://输入当前版本*Author://输入作者名字及单位

    *Date://输入完成日期,例:2001-12-12

    *History1://修改历史记录,包括修改日期、 修改者及修改内容

    *Date:*Version:*Author:*

    Modification:*History2:…

**********************************************************************/

15、函数头部应进行注释,列出:函数的目的/功能、输入参数输出参数、返回值、访问和修改的表、修改信息等。

 

说明:注释必须列出:函数名称、功能描述、输入参数、输出参数、返回值、修改信息等

 

下面是函数头部的中文注释:

/**********************************************************************

*函数名称://函数名称

*功能描述://函数功能、性能等的描述

*访问的表://(可选)被访问的表,此项仅对于有数据库操作的程序

*修改的表://(可选)被修改的表,此项仅对于有数据库操作的程序

*输入参数://输入参数说明,包括每个参数的作用、取值说明及参数间关系

*输出参数://对输出参数的说明。

*返回值://函数返回值的说明

*其它说明://其它说明

*修改日期版本号  修改人  修改内容

*-----------------------------------------------

*2002/08/01  V1.0  XXXX

***********************************************************************/

下面是函数头部的英文注释:

/**********************************************************************

*Function://函数名称(注释对齐)

*Description://函数功能、性能等的描述

*TableAccessed://(可选)被访问的表,此项仅对于有数据库操作的程序

*TableUpdated://(可选)被修改的表,此项仅对于有数据库操作的程序

*Input://输入参数说明,包括每个参数的作用、取值说明以及参数间关系

*Output://对输出参数的说明*Return://函数返回值的说明

*Others://其它说明

*ModifyDateVersion  Author  Modification
*-----------------------------------------------

*2002/08/01  V1.0  XXXX

**********************************************************************/

16、包含在{}中代码块的结束处应加注释,便于阅读。特别是多分支、多重嵌套的条件语句或循环语句;

17、在表达式中使用括号,使表达式的运算顺序更清晰

if (((iYear%4==0) && (iYear % 100 != 0)) || (iYear % 400 == 0))

18、在条件判断语句中,当整型变量与0比较时,不可模仿布尔变量的风格,应当将整型变量用“==”或“!=”直接与0比较;

19、应当将指针变量用“==”或“!=”与NULL比较;

说明:指针变量的零值是“空”(记为NULL),即使NULL的值与0相同,但是两者意义不同

20、在switch语句中,每一个case分支必须使用break结尾,最后一个分支必须是default分支

说明:避免漏掉break语句造成程序错误。同时保持程序简洁。

对于多个分支相同处理的情况可以共用一个break,但是要用注释加以说明。

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页