亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? 編程規范與范例(5).txt

?? 編程規范,各程編程的規范說明,及要注意的問題!
?? TXT
字號:
[編程技巧]編程規范與范例(5)
程序匠人 發表于 2005-8-27 20:18:00       閱讀全文(216) | 回復(0) | 引用(0) 
編程規范與范例(5)  
〖文章轉載或出處〗≡中國電子技術信息網≡ 網址:www.CETINet.com 
編程規范與范例(5)

目  錄
1 排版 6
2 注釋 11
3 標識符命名 18
4 可讀性 20
5 變量、結構 22
6 函數、過程 28
7 可測性 36
8 程序效率 40
9 質量保證 44
10 代碼編輯、編譯、審查 50
11 代碼測試、維護 52
12 宏 53
 
 
9 質量保證
¹ 9-1:在軟件設計過程中構筑軟件質量。
¹ 9-2:代碼質量保證優先原則
     (1)正確性,指程序要實現設計要求的功能。
     (2)穩定性、安全性,指程序穩定、可靠、安全。
     (3)可測試性,指程序要具有良好的可測試性。
     (4)規范/可讀性,指程序書寫風格、命名規則等要符合規范。
     (5)全局效率,指軟件系統的整體效率。
     (6)局部效率,指某個模塊/子模塊/函數的本身效率。
     (7)個人表達方式/個人方便性,指個人編程習慣。
¹ 9-3:只引用屬于自己的存貯空間。
說明:若模塊封裝的較好,那么一般不會發生非法引用他人的空間。
¹ 9-4:防止引用已經釋放的內存空間。
說明:在實際編程過程中,稍不留心就會出現在一個模塊中釋放了某個內存塊(如C語言指針),而另一模塊在隨后的某個時刻又使用了它。要防止這種情況發生。
¹ 9-5:過程/函數中分配的內存,在過程/函數退出之前要釋放。
¹ 9-6:過程/函數中申請的(為打開文件而使用的)文件句柄,在過程/函數退出之前要關閉。
說明:分配的內存不釋放以及文件句柄不關閉,是較常見的錯誤,而且稍不注意就有可能發生。這類錯誤往往會引起很嚴重后果,且難以定位。
示例:下函數在退出之前,沒有把分配的內存釋放。
typedef unsigned char BYTE;

int example_fun( BYTE gt_len, BYTE *gt_code )
{
    BYTE *gt_buf;

    gt_buf = (BYTE *) malloc (MAX_GT_LENGTH);
    ...  //program code, include check gt_buf if or not NULL.
    
    /* global title length error */
    if (gt_len > MAX_GT_LENGTH)
    {
        return GT_LENGTH_ERROR; // 忘了釋放gt_buf
    }
    
    ...  // other program code
}

應改為如下。
int example_fun( BYTE gt_len, BYTE *gt_code )
{
    BYTE *gt_buf;

    gt_buf = (BYTE * ) malloc ( MAX_GT_LENGTH );
    ...  // program code, include check gt_buf if or not NULL.
    
    /* global title length error */
    if (gt_len > MAX_GT_LENGTH)
    {
        free( gt_buf  ); // 退出之前釋放gt_buf
        return GT_LENGTH_ERROR;  
    }
    
    ...  // other program code
}
¹ 9-7:防止內存操作越界。
說明:內存操作主要是指對數組、指針、內存地址等的操作。內存操作越界是軟件系統主要錯誤之一,后果往往非常嚴重,所以當我們進行這些操作時一定要仔細小心。
示例:假設某軟件系統最多可由10個用戶同時使用,用戶號為1-10,那么如下程序存在問題。
#define MAX_USR_NUM 10
unsigned char usr_login_flg[MAX_USR_NUM]= "";

void set_usr_login_flg( unsigned char usr_no )
{
    if (!usr_login_flg[usr_no])
    {
        usr_login_flg[usr_no]= TRUE;
    }
}

當usr_no為10時,將使用usr_login_flg越界。可采用如下方式解決。
void set_usr_login_flg( unsigned char usr_no )
{
    if (!usr_login_flg[usr_no - 1])
    {
        usr_login_flg[usr_no - 1]= TRUE;
    }
}
¹ 9-8:認真處理程序所能遇到的各種出錯情況。
¹ 9-9:系統運行之初,要初始化有關變量及運行環境,防止未經初始化的變量被引用。
¹ 9-10:系統運行之初,要對加載到系統中的數據進行一致性檢查。
說明:使用不一致的數據,容易使系統進入混亂狀態和不可知狀態。
¹ 9-11:嚴禁隨意更改其它模塊或系統的有關設置和配置。
說明:編程時,不能隨心所欲地更改不屬于自己模塊的有關設置如常量、數組的大小等。
¹ 9-12:不能隨意改變與其它模塊的接口。
¹ 9-13:充分了解系統的接口之后,再使用系統提供的功能。
示例:在B型機的各模塊與操作系統的接口函數中,有一個要由各模塊負責編寫的初始化過程,此過程在軟件系統加載完成后,由操作系統發送的初始化消息來調度。因此就涉及到初始化消息的類型與消息發送的順序問題,特別是消息順序,若沒搞清楚就開始編程,很容易引起嚴重后果。以下示例引自B型曾出現過的實際代碼,其中使用了FID_FETCH_DATA與FID_INITIAL初始化消息類型,注意B型機的系統是在FID_FETCH_DATA之前發送FID_INITIAL的。

MID alarm_module_list[MAX_ALARM_MID];

int FAR SYS_ALARM_proc( FID function_id, int handle )
{
    _UI i, j;

    switch ( function_id )
    {
        ... // program code
    
        case FID_INITAIL:
            for (i = 0; i < MAX_ALARM_MID; i++)
            {
                if (alarm_module_list[i]== BAM_MODULE // **)
                   || (alarm_module_list[i]== LOCAL_MODULE)
                {

                    for (j = 0; j < ALARM_CLASS_SUM; j++)
                    {
                        FAR_MALLOC( ... );
                    }
                }
            }

            ... // program code

            break;
    
        case FID_FETCH_DATA:

            ... // program code

            Get_Alarm_Module( );  // 初始化alarm_module_list

            break;
    
        ... // program code
    }
}

由于FID_INITIAL是在FID_FETCH_DATA之前執行的,而初始化alarm_module_list是在FID_FETCH_DATA中進行的,故在FID_INITIAL中(**)處引用alarm_module_list變量時,它還沒有被初始化。這是個嚴重錯誤。
應如下改正:要么把Get_Alarm_Module函數放在FID_INITIAL中(**)之前;要么就必須考慮(**)處的判斷語句是否可以用(不使用alarm_module_list變量的)其它方式替代,或者是否可以取消此判斷語句。
&sup1; 9-14:編程時,要防止差1錯誤。
說明:此類錯誤一般是由于把“<=”誤寫成“<”或“>=”誤寫成“>”等造成的,由此引起的后果,很多情況下是很嚴重的,所以編程時,一定要在這些地方小心。當編完程序后,應對這些操作符進行徹底檢查。
&sup1; 9-15:要時刻注意易混淆的操作符。當編完程序后,應從頭至尾檢查一遍這些操作符,以防止拼寫錯誤。
說明:形式相近的操作符最容易引起誤用,如C/C++中的“=”與“==”、“|”與“||”、“&”與“&&”等,若拼寫錯了,編譯器不一定能夠檢查出來。
示例:如把“&”寫成“&&”,或反之。
ret_flg = (pmsg->ret_flg & RETURN_MASK);  
被寫為:
ret_flg = (pmsg->ret_flg && RETURN_MASK);

rpt_flg = (VALID_TASK_NO( taskno ) && DATA_NOT_ZERO( stat_data ));
被寫為:
rpt_flg = (VALID_TASK_NO( taskno ) & DATA_NOT_ZERO( stat_data ));
&sup1; 9-16:有可能的話,if語句盡量加上else分支,對沒有else分支的語句要小心對待;switch語句必須有default分支。
&sup1; 9-17:Unix下,多線程的中的子線程退出必需采用主動退出方式,即子線程應return出口。
&sup1; 9-18:不要濫用goto語句。
說明:goto語句會破壞程序的結構性,所以除非確實需要,最好不使用goto語句。
&frac12; 9-1:不使用與硬件或操作系統關系很大的語句,而使用建議的標準語句,以提高軟件的可移植性和可重用性。
&frac12; 9-2:除非為了滿足特殊需求,避免使用嵌入式匯編。
說明:程序中嵌入式匯編,一般都對可移植性有較大的影響。
&frac12; 9-3:精心地構造、劃分子模塊,并按“接口”部分及“內核”部分合理地組織子模塊,以提高“內核”部分的可移植性和可重用性。
說明:對不同產品中的某個功能相同的模塊,若能做到其內核部分完全或基本一致,那么無論對產品的測試、維護,還是對以后產品的升級都會有很大幫助。
&frac12; 9-4:精心構造算法,并對其性能、效率進行測試。
&frac12; 9-5:對較關鍵的算法最好使用其它算法來確認。
&frac12; 9-6:時刻注意表達式是否會上溢、下溢。
示例:如下程序將造成變量下溢。
unsigned char size ;
while (size-- >= 0) // 將出現下溢
{
    ... // program code
}

當size等于0時,再減1不會小于0,而是0xFF,故程序是一個死循環。應如下修改。
char size; // 從unsigned char 改為char
while (size-- >= 0)
{
    ... // program code
}
&frac12; 9-7:使用變量時要注意其邊界值的情況。
示例:如C語言中字符型變量,有效值范圍為-128到127。故以下表達式的計算存在一定風險。
char chr = 127;
int sum = 200;

chr += 1; // 127為chr的邊界值,再加1將使chr上溢到-128,而不是128。
sum += chr; // 故sum的結果不是328,而是72。

若chr與sum為同一種類型,或表達式按如下方式書寫,可能會好些。
sum = sum + chr + 1; 
&frac12; 9-8:留心程序機器碼大小(如指令空間大小、數據空間大小、堆棧空間大小等)是否超出系統有關限制。
&frac12; 9-9:為用戶提供良好的接口界面,使用戶能較充分地了解系統內部運行狀態及有關系統出錯情況。
&frac12; 9-10:系統應具有一定的容錯能力,對一些錯誤事件(如用戶誤操作等)能進行自動補救。
&frac12; 9-11:對一些具有危險性的操作代碼(如寫硬盤、刪數據等)要仔細考慮,防止對數據、硬件等的安全構成危害,以提高系統的安全性。
&frac12; 9-12:使用第三方提供的軟件開發工具包或控件時,要注意以下幾點:
(1)充分了解應用接口、使用環境及使用時注意事項。
(2)不能過分相信其正確性。
(3)除非必要,不要使用不熟悉的第三方工具包與控件。
說明:使用工具包與控件,可加快程序開發速度,節省時間,但使用之前一定對它有較充分的了解,同時第三方工具包與控件也有可能存在問題。
&frac12; 9-13:資源文件(多語言版本支持),如果資源是對語言敏感的,應讓該資源與源代碼文件脫離,具體方法有下面幾種:使用單獨的資源文件、DLL文件或其它單獨的描述文件(如數據庫格式)
 
 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人教育av在线| 久久99国产精品尤物| 欧美电影免费提供在线观看| 欧美在线观看禁18| 色婷婷av一区| 欧美日韩精品免费观看视频| 欧美色中文字幕| 欧美日韩一级片在线观看| 成人免费观看视频| 99久久精品国产精品久久| 91视频一区二区三区| 一本在线高清不卡dvd| 色综合中文字幕国产| 成人激情视频网站| 色婷婷综合激情| 欧美三级日韩三级国产三级| 欧美日韩国产乱码电影| 51久久夜色精品国产麻豆| 欧美一区二区三区免费大片| 日韩免费视频一区| 国产欧美日韩激情| 亚洲视频每日更新| 亚洲午夜av在线| 日韩精品电影在线观看| 久久精品国产99| 国产成人99久久亚洲综合精品| 国产馆精品极品| 一本色道久久综合狠狠躁的推荐| 欧美亚洲日本一区| 精品美女在线观看| 亚洲色图一区二区三区| 天天综合色天天综合色h| 九九**精品视频免费播放| 国产成人亚洲综合a∨婷婷| bt7086福利一区国产| 欧美日韩精品一二三区| 久久网站热最新地址| 亚洲欧美日本在线| 国产自产2019最新不卡| aaa亚洲精品一二三区| 欧美日韩高清一区二区不卡| 久久免费电影网| 一区二区三区成人| 国产麻豆成人精品| 在线精品视频免费播放| 久久午夜老司机| 亚洲va韩国va欧美va精品| 国产二区国产一区在线观看| 欧美日韩精品一区二区三区| 欧美激情一区二区三区蜜桃视频 | 欧美日韩免费观看一区三区| 日韩欧美视频一区| 亚洲欧美日韩综合aⅴ视频| 久久99热99| 欧美日韩成人在线一区| 国产精品色婷婷久久58| 久久99国产精品久久99| 欧洲一区在线观看| 国产精品白丝在线| 国产福利一区二区三区在线视频| 欧美亚洲综合色| 亚洲品质自拍视频| 国产成人av电影在线播放| 91精品婷婷国产综合久久| 亚洲欧美乱综合| 9i看片成人免费高清| 久久久三级国产网站| 免费看黄色91| 4438成人网| 日韩精品三区四区| 欧美日韩国产不卡| 亚洲影院免费观看| 精品毛片乱码1区2区3区| 亚洲自拍偷拍欧美| 日本高清不卡在线观看| 国产精品久久久久久久久果冻传媒 | 波多野结衣中文字幕一区二区三区 | 成人深夜视频在线观看| 精品99999| 韩国午夜理伦三级不卡影院| 欧美一卡2卡三卡4卡5免费| 日韩中文字幕不卡| 欧美一区中文字幕| 青青草国产精品亚洲专区无| 日韩一区二区高清| 极品美女销魂一区二区三区| 欧美不卡在线视频| 韩国精品在线观看| 欧美国产丝袜视频| 99久久国产综合精品麻豆| 亚洲乱码国产乱码精品精98午夜| 成人a区在线观看| 亚洲女同ⅹxx女同tv| 在线中文字幕一区| 日韩精品1区2区3区| 日韩精品一区二区三区三区免费| 日本欧美一区二区| 欧美videossexotv100| 国产毛片精品一区| 中文字幕亚洲欧美在线不卡| 色av成人天堂桃色av| 一区二区欧美国产| 欧美一区二区三区性视频| 激情av综合网| 国产精品久久久久久久久快鸭| 日本伦理一区二区| 人人精品人人爱| 亚洲国产精品成人综合 | 一区二区三区在线看| 91精品国产91久久久久久一区二区 | 麻豆freexxxx性91精品| 欧美国产日韩一二三区| 一本一道波多野结衣一区二区| 日本一不卡视频| 中文在线一区二区| 91精品国产色综合久久不卡蜜臀| 国产精品99久久久久久似苏梦涵 | 国产麻豆精品在线观看| 一区二区三区精品视频在线| 欧美一级淫片007| 9人人澡人人爽人人精品| 日韩精品电影一区亚洲| 中文字幕不卡在线| 91精品婷婷国产综合久久 | 国产精品国产自产拍高清av王其| 欧美三级电影在线看| 国产一区二区三区免费看| 亚洲欧美另类图片小说| 亚洲精品在线观看视频| 欧美性欧美巨大黑白大战| 国产成人免费高清| 五月婷婷综合网| 国产精品区一区二区三| 日韩免费福利电影在线观看| 91官网在线免费观看| 国产suv精品一区二区883| 天堂蜜桃91精品| 亚洲私人影院在线观看| 久久精品人人爽人人爽| 日韩一区二区精品葵司在线| 欧美性高清videossexo| 99久久婷婷国产综合精品| 激情图区综合网| 毛片av一区二区三区| 亚洲成av人片在线观看无码| 亚洲丝袜精品丝袜在线| 国产精品灌醉下药二区| 欧美激情一区二区三区全黄| www国产精品av| 欧美tk—视频vk| 日韩欧美中文一区二区| 69堂成人精品免费视频| 精品视频一区三区九区| 色老汉一区二区三区| 92精品国产成人观看免费 | 亚洲欧美日韩国产综合| 亚洲欧洲一区二区在线播放| 久久嫩草精品久久久久| 精品美女在线观看| 久久网站热最新地址| 欧美精品一区二| 久久亚洲欧美国产精品乐播 | 国产一区二区不卡老阿姨| 久久精品久久精品| 久久99国内精品| 国产麻豆欧美日韩一区| 国产福利一区二区三区在线视频| 国产精品一区二区久激情瑜伽| 国产尤物一区二区| 北条麻妃国产九九精品视频| 99久精品国产| 欧美性猛交xxxx黑人交| 欧美狂野另类xxxxoooo| 日韩欧美激情在线| 久久久国产一区二区三区四区小说 | 青青草成人在线观看| 久久成人免费日本黄色| 国产精品99久久久久久似苏梦涵| 成人激情动漫在线观看| 91网站在线播放| 欧美精品视频www在线观看| 欧美一区二区二区| 国产日韩欧美高清| 亚洲精品国产第一综合99久久| 亚洲在线中文字幕| 久久97超碰国产精品超碰| 成人国产精品免费网站| 在线看日本不卡| 日韩欧美在线观看一区二区三区| 久久久久88色偷偷免费| 亚洲乱码国产乱码精品精98午夜| 日韩二区三区四区| 成人app在线观看| 欧美视频在线不卡| 久久天堂av综合合色蜜桃网| 中文字幕日韩精品一区| 日本视频在线一区| 99re在线精品| 久久综合九色综合欧美98| 亚洲欧美视频在线观看|