華為代碼規範
一、排版
1、程式塊采用縮進風格編寫,縮進空格數為4個
2、相對獨立的程式塊之間、變量說明之間必須加空行
如:if(!valid_ni(ni))
{..
}
//此處空行必須加
Repssn_ind = ssn_data[index].ni;
Repssn_ind = ssn_data[index].repssn_index;
3、大于80字元的語句或者循環、判斷等語句中有較長表達式或語句要分多行書寫,長表達是要在低優先級操作符處劃分新行,操作符要放在新行之首,劃分出的新行要進行适當的縮進,使排版整齊,語句可讀
如:
(1)Per_count_msg.head.len = No7_To_STAT_PERM_COUNT_LEN
+ STAT_SIZE_PER_FRA*sizeof(_UL);
(2)if((tasko < max_axt_task_number)
&&(n7stat_stat_item_valid(stat_item)))
{
.....
}
4、不允許把多個短語句寫在同一行
int x = 0; double y = 9;//不規範
5、if、for等判斷或循環語句自占一行,同時一定要加括号{}
不規範:if(x==0) return;
規範: if(x == 0)
{
return;
}
6、對齊隻使用空格鍵,不适用TAB鍵,防止閱讀器器不同,程式布局不整齊
7、程式塊的分界符(如c/c++語言中的大括号 “{}”應獨占一行而且位于同一列,同時與引用語句左對齊
不規範:
(1)for(...){
}
(2)for(...)
{
....
}
規範:
for(...)
{
.....
8、關于空格:
(1)逗号分号隻在後面加空格
int a, b, c;
(2)比較運算符,指派操作符”=”、”+=”,算術操作符”+”、”%”,邏輯操作符”&&”、”&”,位運算符”<<”、”^”等雙目運算符前後加空格,如:
for(a >= 0)
A = C + D;
A *= 2;
}
(3)”!”、”~”、”++”、”--”等單目運算符和”->”、”.”前後不加空格
P = ‘a’;
++i;
K->id = pid;
二、注釋
1、源代碼有效注釋量在百分之二十以上,不宜過少也不要過多,注釋統一格式,使用”/*....*/
2、函數頭部應進行注釋,列出:函數的目的/功能、輸入參數、輸出參數、傳回值、調用關系,如下執行個體:
/*
Function: //函數名稱
Description: //函數功能、性能等的描述
Calls: //被本函數調用的函數清單
Called By: //調用本函數的函數清單
Table Accessed: //被通路的表(此項僅對于牽扯到資料庫操作的程式)
Table Updated: ///被修改的表(此項僅對于牽扯到資料庫操作的程式)
Input: //輸入參數說明,包括每個參數的作用、取值說明及參數間關系。
Output://對輸出參數的說明。
Return://函數傳回值的說明
Others://其它說明
*/
3、注釋的内容要清楚、明了,含義準确,防止注釋二義性。
4、避免在注釋中使用縮寫,特别是非常用縮寫。
5、注釋應與其描述的代碼相近,對代碼的注釋應放在其上方或右方(對單條語句的注釋)
相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開。
示例:如下例子不符合規範。
例1:/* get replicate sub system index and net indicator */
repssn_ind = ssn_data [index] .repssn_index;
repssn_ni =ssn_data [index] .ni;
6、資料結構聲明(包括數組、結構、類、枚舉等),如果其命名不是充分自注釋的,必須加以注釋。對資料結構的注釋應放在其上方相鄰位置,不可放在下面;對結構中的每個域的注釋放在此域的右方。
7、全局變量要有較詳細的注釋,包括對其功能、取值範圍、哪些函數或過程存取它以及
存取時注意事項等的說明。
三、辨別符命名
1、辨別符命名要清晰、明了,有明确含義,同時使用完整單詞或大家可了解的縮寫
2、命名若使用特殊約定或縮寫,需注釋說明
3、命名有自己的風格,且不要來回變化
4、除特殊應用,避免以下劃線結束的命名
四、函數及過程
1、函數規模盡量在200行内,不包括注釋
2、一個函數僅完成一個功能
3、為簡單函數編寫代碼
如:value = (a > b) ? a : b;
改為
int max (int a ,int b)
return ((a > b) ? a: b))
4、避免設計多參數函數
5、函數名能準确描述函數的功能
6、防止将無關聯的語句放在一個函數
例:不規範
void Init_Var()
Rect.length = 0;
Rect.width = 0;//初始化矩形長和寬
Point.x = 0;
Point.y = 10;//初始化點的橫縱坐标;