嵌入式C語言編程規範--排版與格式(個人規約)

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,但是要用註釋加以說明。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章