1. 程式人生 > >華為公司 程式碼編碼規範

華為公司 程式碼編碼規範

原文連結:http://blog.sina.com.cn/s/blog_61176a740100ffer.html

1-1:程式塊要採用縮排風格編寫,縮排的空格數為4個。

說明:對於由開發工具自動生成的程式碼可以有不一致。


1-2:相對獨立的程式塊之間、變數說明之後必須加空行。
示例:如下例子不符合規範。
if (!valid_ni(ni))
{
    ... //program code
}
repssn_ind = ssn_data[index].repssn_index;
repssn_ni  =ssn_data[index].ni;

應如下書寫
if (!valid_ni(ni))
{
    ... //program code
}

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

 1-3:較長的語句(>80字元)要分成多行書寫,長表示式要在低優先順序操作符處劃分新行,操作符放在新行之首,劃分出的新行要進行適當的縮排,使排版整齊,語句可讀。
示例:
perm_count_msg.head.len =NO7_TO_STAT_PERM_COUNT_LEN
                         + STAT_SIZE_PER_FRAM * sizeof( _UL );

act_task_table[frame_id *STAT_TASK_CHECK_NUMBER + index].occupied
             = stat_poi[index].occupied;

act_task_table[taskno].duration_true_or_false
             = SYS_get_sccp_statistic_state( stat_item );

report_or_not_flag = ((taskno< MAX_ACT_TASK_NUMBER)
                     && (n7stat_stat_item_valid(stat_item))
                     &&(act_task_table[taskno].result_data != 0));

1-4:迴圈、判斷等語句中若有較長的表示式或語句,則要進行適應的劃分,長表示式要在低優先順序操作符處劃分新行,操作符放在新行之首。
示例:
if ((taskno <max_act_task_number)
   && (n7stat_stat_item_valid(stat_item)))
{
    ... //program code
}

for (i = 0, j = 0; (i< BufferKeyword[word_index].word_length)
                   && (j <NewKeyword.word_length); i++, j++)
{
    ... //program code
}

for (i = 0, j =0; 
    (i < first_word_length)&& (j <second_word_length); 
    i++, j++)
{
    ... //program code
}

1-5:若函式或過程中的引數較長,則要進行適當的劃分。
示例:
n7stat_str_compare((BYTE *)& stat_object,
                  (BYTE *) &(act_task_table[taskno].stat_object),
                  sizeof (_STAT_OBJECT));

n7stat_flash_act_duration(stat_item, frame_id *STAT_TASK_CHECK_NUMBER
                                     + index, stat_object );

1-6:不允許把多個短語句寫在一行中,即一行只寫一條語句。
示例:如下例子不符合規範。
rect.length = 0; rect.width = 0;

應如下書寫
rect.length = 0;
rect.width  = 0;

1-7:if、for、do、while、case、switch、default等語句自佔一行,且if、for、do、while等語句的執行語句部分無論多少都要加括號{}。
示例:如下例子不符合規範。
if (pUserCR == NULL)return;

應如下書寫:
if (pUserCR == NULL)
{
   return;
}

1-8:對齊只使用空格鍵,不使用TAB鍵。
說明:以免用不同的編輯器閱讀程式時,因TAB鍵所設定的空格數目不同而造成程式佈局不整齊,不要使用BC作為編輯器合版本,因為BC會自動將8個空格變為一個TAB鍵,因此使用BC合入的版本大多會將縮排變亂。

1-9:函式或過程的開始、結構的定義及迴圈、判斷等語句中的程式碼都要採用縮排風格,case語句下的情況處理語句也要遵從語句縮排要求。

1-10:程式塊的分界符(如C/C++語言的大括號‘{’和‘}’)應各獨佔一行並且位於同一列,同時與引用它們的語句左對齊。在函式體的開始、類的定義、結構的定義、列舉的定義以及if、for、do、while、switch、case語句中的程式都要採用如上的縮排方式。
示例:如下例子不符合規範。
for (...) {
    ... //program code
}

if (...)
    {
    ... //program code
   }

void example_fun( void )
    {
    ... //program code
   }

應如下書寫。
for (...)
{
    ... //program code
}

if (...)
{
    ... //program code
}

void example_fun( void )
{
    ... //program code
}

1-11:在兩個以上的關鍵字、變數、常量進行對等操作時,它們之間的操作符之前、之後或者前後要加空格;進行非對等操作時,如果是關係密切的立即操作符(如->),後不應加空格。
說明:採用這種鬆散方式編寫程式碼的目的是使程式碼更加清晰。
由於留空格所產生的清晰性是相對的,所以,在已經非常清晰的語句中沒有必要再留空格,如果語句已足夠清晰則括號內側(即左括號後面和右括號前面)不需要加空格,多重括號間不必加空格,因為在C/C++語言中括號已經是最清晰的標誌了。
在長語句中,如果需要加的空格非常多,那麼應該保持整體清晰,而在區域性不加空格。給操作符留空格時不要連續留兩個以上空格。

示例:
(1) 逗號、分號只在後面加空格。
int a, b, c;

(2)比較操作符, 賦值操作符"="、"+=",算術操作符"+"、"%",邏輯操作符"&&"、"&",位域操作符"<<"、"^"等雙目操作符的前後加空格。
if (current_time >=MAX_TIME_VALUE)
a = b + c;
a *= 2;
a = b ^ 2;

(3)"!"、"~"、"++"、"--"、"&"(地址運算子)等單目操作符前後不加空格。
*p ='a';        //內容操作"*"與內容之間
flag =!isEmpty; //非操作"!"與內容之間
p =&mem;       // 地址操作"&"與內容之間
i++;            // "++","--"與內容之間

(4)"->"、"."前後不加空格。
p->id =pid;    // "->"指標前後不加空格

(5) if、for、while、switch等與後面的括號間應加空格,使if等關鍵字更為突出、明顯。
if (a >= b&& c >d)

1-1:一行程式以小於80字元為宜,不要寫得過長。
    
2 註釋

2-1:一般情況下,源程式有效註釋量必須在20%以上。
說明:註釋的原則是有助於對程式的閱讀理解,在該加的地方都加了,註釋不宜太多也不能太少,註釋語言必須準確、易懂、簡潔。

2-2:說明性檔案(如標頭檔案.h檔案、.inc檔案、.def檔案、編譯說明檔案.cfg等)頭部應進行註釋,註釋必須列出:版權說明、版本號、生成日期、作者、內容、功能、與其它檔案的關係、修改日誌等,標頭檔案的註釋中還應有函式功能簡要說明。
示例:下面這段標頭檔案的頭註釋比較標準,當然,並不侷限於此格式,但上述資訊建議要包含在內。


華為公司程式碼規範

2-3:原始檔頭部應進行註釋,列出:版權說明、版本號、生成日期、作者、模組目的/功能、主要函式及其功能、修改日誌等。
示例:下面這段原始檔的頭註釋比較標準,當然,並不侷限於此格式,但上述資訊建議要包含在內。

華為公司程式碼規範
說明:Description一項描述本檔案的內容、功能、內部各部分之間的關係及本檔案與其它檔案關係等。History是修改歷史記錄列表,每條修改記錄應包括修改日期、修改者及修改內容簡述。

2-4:函式頭部應進行註釋,列出:函式的目的/功能、輸入引數、輸出引數、返回值、呼叫關係(函式、表)等。
示例:下面這段函式的註釋比較標準,當然,並不侷限於此格式,但上述資訊建議要包含在內。

華為公司程式碼規範

2-5:邊寫程式碼邊註釋,修改程式碼同時修改相應的註釋,以保證註釋與程式碼的一致性。不再有用的註釋要刪除。

2-6:註釋的內容要清楚、明瞭,含義準確,防止註釋二義性。
說明:錯誤的註釋不但無益反而有害。

2-7:避免在註釋中使用縮寫,特別是非常用縮寫。
說明:在使用縮寫時或之前,應對縮寫進行必要的說明。

2-8:註釋應與其描述的程式碼相近,對程式碼的註釋應放在其上方或右方(對單條語句的註釋)相鄰位置,不可放在下面,如放於上方則需與其上面的程式碼用空行隔開。
示例:如下例子不符合規範。

華為公司程式碼規範
repssn_ind =ssn_data[index].repssn_index;
repssn_ni = ssn_data[index].ni;

應如下書寫
華為公司程式碼規範

2-9:對於所有有物理含義的變數、常量,如果其命名不是充分自注釋的,在宣告時都必須加以註釋,說明其物理含義。變數、常量、巨集的註釋應放在其上方相鄰位置或右方。
示例:
華為公司程式碼規範

2-10:資料結構宣告(包括陣列、結構、類、列舉等),如果其命名不是充分自注釋的,必須加以註釋。對資料結構的註釋應放在其上方相鄰位置,不可放在下面;對結構中的每個域的註釋放在此域的右方。
示例:可按如下形式說明列舉/資料/聯合結構。
華為公司程式碼規範

2-11:全域性變數要有較詳細的註釋,包括對其功能、取值範圍、哪些函式或過程存取它以及存取時注意事項等的說明。
示例:

華為公司程式碼規範