




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
版本號(hào):TDCQ C/C++源代碼及其文檔書(shū)寫(xiě)規(guī)范TDCQ公司20XX年05月C/C++C/C++源代碼及其文檔書(shū)寫(xiě)規(guī)范--PAGE4-目 錄1前言 .-1-2DNC前綴和名空間1-2.1CDNC做前綴12.2C++DNC13C/C++23.1C/C++源代碼注釋23.1.1總體注釋要求3-3.1.2說(shuō)明性文件頭部的注釋3-3.1.3源文件頭部的注釋4-3.1.4函數(shù)頭部的注釋5-3.1.5if、while、do等其大括號(hào)內(nèi)嵌代碼塊的注釋5-3.1.6某個(gè)代碼段的注釋6-3.1.7注釋的位置6-3.1.8對(duì)于所有物理含義的變量、常量及宏的注釋7-3.1.9數(shù)據(jù)結(jié)構(gòu)聲明(包括數(shù)組、結(jié)構(gòu)、類(lèi)、枚舉等)的注釋7-3.1.10全局變量的注釋7-3.1.11注釋與所描述內(nèi)容縮進(jìn)的要求832C/C++源代碼注釋書(shū)寫(xiě)與幫助文檔的自動(dòng)生成83.2.1塊注釋8-3.2.2行注釋9-3.2.3函數(shù)的摘要9-3.2.4函數(shù)的形參9-3.2.5函數(shù)的返回值9-3.2.6函數(shù)的注意事項(xiàng)(Remark)10-3.2.7補(bǔ)充說(shuō)明10-3.3C/C++代碼書(shū)寫(xiě)規(guī)范103.3.1每行代碼長(zhǎng)度10-3.3.2合并行的問(wèn)題 .--3.3.3指針中*號(hào)的位置--3.3.4全局函數(shù)的調(diào)用12-3.3.5if...elseif12-3.3.6與“{”、“}”有關(guān)的規(guī)定12-與“{”、“}”有關(guān)代碼的縮進(jìn)格式12“{”、“}”的省略12-3.3.7與空格有關(guān)的各項(xiàng)規(guī)定13-對(duì)兩目、三目運(yùn)算符兩邊的空格的規(guī)定13-for、while、if等關(guān)鍵字之后空格的規(guī)定13-對(duì)調(diào)用函數(shù)、宏時(shí)的空格規(guī)定13-對(duì)類(lèi)型強(qiáng)制轉(zhuǎn)換時(shí)的空格規(guī)定14-3.3.8代碼縮進(jìn)/對(duì)齊使用空格的規(guī)定14-4個(gè)空格14-代碼不縮進(jìn)情況14-3.3.9與類(lèi)相關(guān)的.h文件與.cpp文件15-類(lèi)的定義與實(shí)現(xiàn)15-類(lèi)的合并15-3.3.10對(duì)變量的要求15-對(duì)變量的要求15-對(duì)變量類(lèi)型的要求16-3.3.11對(duì)結(jié)構(gòu)的要求16結(jié)構(gòu)的功能要單一16不同結(jié)構(gòu)間的關(guān)系要簡(jiǎn)單173.3.12函數(shù)的編寫(xiě)要求18-函數(shù)編寫(xiě)的總體要求18-函數(shù)名的要求19-函數(shù)參數(shù)的要求19-函數(shù)功能的要求20-可重入函數(shù)編寫(xiě) .-21-3.3.13C/C++程序效率的要求223.3.14C/C++代碼質(zhì)量的要求23代碼質(zhì)量保證優(yōu)先原則23-對(duì)內(nèi)存及句柄操作的要求23-其他要求25-3.3.15C/C++代碼測(cè)試與維護(hù)264 C/C++274.1總體命名要求27-4.2具體命名規(guī)范28-4.2.1工程名28-4.2.2文件名28-4.2.3函數(shù)名28-4.2.4變量名28-4.2.5類(lèi)名29-4.2.6結(jié)構(gòu)、宏、枚舉及聯(lián)合的名字29-4.2.7具有互斥意義的變量或相反動(dòng)作的函數(shù)的命名29-4.2.8對(duì)命名中下劃線的使用規(guī)定30-5程序開(kāi)發(fā)中相關(guān)文檔撰寫(xiě)規(guī)定30-5.1程序設(shè)計(jì)與開(kāi)發(fā)文檔30-5.1.1軟件的開(kāi)發(fā)背景30-5.1.2軟件的結(jié)構(gòu)設(shè)計(jì)30-5.1.3數(shù)據(jù)及資源文件說(shuō)明31-數(shù)據(jù)用途31-數(shù)據(jù)格式31-5.1.4程序結(jié)構(gòu)設(shè)計(jì)與開(kāi)發(fā)31-5.2程序使用文檔31-5.2.1軟件系統(tǒng)的程序組成31-5.2.2開(kāi)發(fā)環(huán)境要求、軟件安裝及環(huán)境配置31-5.2.3軟件系統(tǒng)的使用方法 .-34-5.3程序測(cè)試文檔36-5.3.1測(cè)試環(huán)境37-5.3.2軟件測(cè)試項(xiàng)目和功能37-5.3.3軟件測(cè)試數(shù)據(jù)及格式37-5.3.4軟件測(cè)試過(guò)程37-5.4軟件程序調(diào)試文檔37-6程序及文檔備份39-6.1源程序及其文檔備份39-6.2第三方軟件(開(kāi)發(fā)包或源碼)及其文檔備份39-7詞語(yǔ)縮寫(xiě)表397.1詞語(yǔ)縮寫(xiě)的總體要求39-7.2通用詞縮寫(xiě)表39-7.3專(zhuān)業(yè)詞縮寫(xiě)表44-8中心代碼實(shí)例46-8.1*.h的編寫(xiě)實(shí)例46-8.2*.CPP的編寫(xiě)實(shí)例49C/C++源代碼及其文檔書(shū)寫(xiě)規(guī)范C/C++源代碼及其文檔書(shū)寫(xiě)規(guī)范--PAGE54-前言C/C++源代碼及其相應(yīng)文檔的書(shū)寫(xiě)規(guī)范。制定本規(guī)范的目的是統(tǒng)一北航數(shù)字導(dǎo)航中心研發(fā)部的C/C++語(yǔ)言源代碼的書(shū)寫(xiě)風(fēng)格、注釋內(nèi)容和相應(yīng)文檔的撰寫(xiě),以便于代碼的閱讀、維護(hù)、管理、修訂及使用。從制定完成即日起,程序員在編寫(xiě)C/C++代碼的時(shí)候,需要嚴(yán)格遵守制定的《C/C++源代碼及其文檔書(shū)寫(xiě)規(guī)范》。此外,利用其他語(yǔ)言(VB、DelphiMatlab等)編寫(xiě)的程序的程序員同樣要遵守本規(guī)范。DNC前綴和名空間CDNC做前綴C代碼的接口函數(shù)一律使用DNC(DigitalNavigationCenter,數(shù)字導(dǎo)航中心英文縮寫(xiě))做前綴。例如//C語(yǔ)言代碼在函數(shù)前加DNC_前綴即可,例intDNC_FunName();{return0;}C++DNC做名空間C++代碼使用DNC做名空間。具體示例如下//*.h文件namespaceDNC{classCDncDemo{public:CDncDemo();~CDncDemo();};}//*.cpp文件namespaceDNC{CDncDemo::CDncDemo(){}CDncDemo::~CDncDemo(){}}//在使用CDncDemo的文件中加入:usingnamespaceDNC;//然后定義對(duì)象CDncDemodncobj;//或者直接DNC::CDncDemodncobj;C/C++源代碼注釋及書(shū)寫(xiě)規(guī)范C/C++源代碼注釋除非極其簡(jiǎn)單,否則對(duì)函數(shù)應(yīng)有注釋說(shuō)明。內(nèi)容包括:功能、入口/出口參數(shù),必要時(shí)還可有備注或補(bǔ)充說(shuō)明。推薦采取特定的格式(見(jiàn)第3.2條),以方便用軟件自動(dòng)生成幫助文檔??傮w注釋要求20%以上;也不能太少,注釋語(yǔ)言必須準(zhǔn)確、易懂、簡(jiǎn)潔;反而有害;除非必要,不應(yīng)在代碼或表達(dá)中間插入注釋?zhuān)駝t容易使代碼可理解性變差;進(jìn)行必要的說(shuō)明;注釋格式盡量統(tǒng)一,建議使用“/**/;建議多使用中文,除非能用非常流利準(zhǔn)確的英文表達(dá)。說(shuō)明性文件頭部的注釋?zhuān)ㄈ珙^文件.h.c/c++.def.cfg等與其它文件的關(guān)系、修改日志等,頭文件的注釋中還應(yīng)有函數(shù)功能簡(jiǎn)要說(shuō)明。示例:下面這段頭文件的頭注釋比較標(biāo)準(zhǔn),當(dāng)然,并不局限于此格式,但上述信息建議要包含在內(nèi)。/*************************************************Copyright(C),2008-2022,DNCBUAAFilename: //文件名Author: Version: Date: //作者、版本及完成日期Description: //用于詳細(xì)說(shuō)明此程序文件完成的主要功能,與其他模塊//或函數(shù)的接口,輸出值、取值范圍、含義及參數(shù)間的控//制、順序、獨(dú)立或依賴(lài)等關(guān)系Others: //其它內(nèi)容的說(shuō)明FunctionList://主要函數(shù)列表,每條記錄應(yīng)包括函數(shù)名及功能簡(jiǎn)要說(shuō)明1.History: //修改歷史記錄列表,每條修改記錄應(yīng)包括修改日期、修改//者及修改內(nèi)容簡(jiǎn)述1.Date:Author:Modification:2.*************************************************/源文件頭部的注釋源文件頭部應(yīng)進(jìn)行注釋?zhuān)谐觯喊鏅?quán)說(shuō)明、版本號(hào)、生成日期、作者、模塊目的/功能、主要函數(shù)及其功能、修改日志等。示例:下面這段源文件的頭注釋比較標(biāo)準(zhǔn),當(dāng)然,并不局限于此格式,但上述信息建議要包含在內(nèi)。/********************************************************Copyright(C),2008-2022,DNCBUAAFileName:test.cppAuthor: Version Date://作者、版本及完成日期Description: //模塊描述Version: //版本信息FunctionList: //主要函數(shù)及其功能1. History: //歷史修改記錄David 96/10/12 1.0 buildthismoudle*********************************************************/說(shuō)明:Description一項(xiàng)描述本文件的內(nèi)容、功能、內(nèi)部各部分之間的關(guān)系及本文件與History者及修改內(nèi)容簡(jiǎn)述。函數(shù)頭部的注釋函數(shù)頭部應(yīng)進(jìn)行注釋?zhuān)谐觯汉瘮?shù)的目的/功能、輸入?yún)?shù)、輸出參數(shù)、返回值、調(diào)用關(guān)系(函數(shù)、表)等。示例:下面這段函數(shù)的注釋比較標(biāo)準(zhǔn),當(dāng)然,并不局限于此格式,但上述信息建議要包含在內(nèi)。/*************************************************Function: //函數(shù)名稱(chēng)Description: //函數(shù)功能、性能等的描述Calls: //被本函數(shù)調(diào)用的函數(shù)清單CalledBy: //調(diào)用本函數(shù)的函數(shù)清單TableAccessed://被訪問(wèn)的表(此項(xiàng)僅對(duì)于牽扯到數(shù)據(jù)庫(kù)操作的程序)TableUpdated://被修改的表(此項(xiàng)僅對(duì)于牽扯到數(shù)據(jù)庫(kù)操作的程序)Input://輸入?yún)?shù)說(shuō)明,包括每個(gè)參數(shù)的作//用、取值說(shuō)明及參數(shù)間關(guān)系。Output://對(duì)輸出參數(shù)的說(shuō)明。Return://函數(shù)返回值的說(shuō)明Others://其它說(shuō)明*************************************************/if、while、do等其大括號(hào)內(nèi)嵌代碼塊的注釋比較長(zhǎng)(需拖動(dòng)滾動(dòng)條來(lái)看)或者多層嵌套時(shí),在結(jié)尾的“}”后要加上其所對(duì)應(yīng)的語(yǔ)句的注釋說(shuō)明。例1:if(...){//programcodewhile(index<MAX_INDEX){//programcode/*endofwhile(index<MAX_INDEX)*///指明該條while語(yǔ)句結(jié)束/*endofif(...)*///指明是哪條if例2:BOOLDNC_SaveToFile(constcharBOOLbCanReplace/*=TRUE*/);某個(gè)代碼段的注釋描述某個(gè)代碼段的注釋?zhuān)梢越o注釋描述的代碼段外圍加上{},幫助閱讀。例://代碼段實(shí)現(xiàn)功能或意圖描述{代碼段}注釋的位置注釋?xiě)?yīng)與其描述的代碼相近,對(duì)代碼的注釋?xiě)?yīng)放在其上方或右方相鄰位置,不可放在下面,如放于上方則需與其上面的代碼用空行隔開(kāi)。示例:如下例子不符合規(guī)范。例1:/*getreplicatesubsystemindexandnetindicator*/repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;例2:repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;/*getreplicatesubsystemindexandnetindicator*/應(yīng)如下書(shū)寫(xiě)/*getreplicatesubsystemindexandnetindicator*/repssn_ind=ssn_data[index].repssn_index;repssn_ni=ssn_data[index].ni;對(duì)于所有物理含義的變量、常量及宏的注釋對(duì)于所有物理含義的變量、常量,如果其命名不是充分自注釋的,在聲明時(shí)都必/*activestatistictasknumber*/#defineMAX_ACT_TASK_NUMBER1000#defineMAX_ACT_TASK_NUMBER1000/*activestatistictasknumber*/數(shù)據(jù)結(jié)構(gòu)聲明(包括數(shù)組、結(jié)構(gòu)、類(lèi)、枚舉等)的注釋數(shù)據(jù)結(jié)構(gòu)聲明(包括數(shù)組、結(jié)構(gòu)、類(lèi)、枚舉等),如果其命名不是充分自注釋的,必須加以注釋。對(duì)數(shù)據(jù)結(jié)構(gòu)的注釋?xiě)?yīng)放在其上方相鄰位置,不可放在下面;對(duì)結(jié)構(gòu)中的每個(gè)域的注釋放在此域的右方。示例:可按如下形式說(shuō)明枚舉/數(shù)據(jù)/聯(lián)合結(jié)構(gòu)。/*sccpinterfacewithsccpuserprimitivemessagename*/enumDNC_USER_PRIMITIVE{N_UNITDATA_IND;/*dncnotifydncuserunitdatacome*/N_NOTICE_IND;/*dncnotifyusertheNo.7networkcannot*//*transmissionthismessage*/N_UNITDATA_REQ;/*dncuser'sunitdatatransmissionrequest*/};全局變量的注釋全局變量要有較詳細(xì)的注釋?zhuān)▽?duì)其功能、取值范圍、哪些函數(shù)或過(guò)程存取它以及存取時(shí)注意事項(xiàng)等的說(shuō)明。示例:/*TheErrorCodewhenDNCtranslate*//*GlobalTitlefailure,asfollows*///變量作用、含義/*0-SUCCESS1-GTTableerror*//*2-GTerrorOthers-nouse*///變量取值范圍/*onlyfunctionDNC_Translate()in*//*thismodualcanmodifyit,andother*//*modulecanvisititthroughcall*//*thefunctionDNC_GetGTTransErrorCode()*///使用方法BYTEg_GTTranErrorCode;注釋與所描述內(nèi)容縮進(jìn)的要求注釋與所描述內(nèi)容進(jìn)行同樣的縮排,做到程序排版整齊,并方便注釋的閱讀與理解。例如voidDNC_ExampleFun(void){/*codeonecommentsCodeBlockOne/*codetwocommentsCodeBlockTwo}3.2C/C++源代碼注釋書(shū)寫(xiě)與幫助文檔的自動(dòng)生成C/C++Doxygen工具自動(dòng)生成幫助文3.1節(jié)。塊注釋[格式]開(kāi)頭:/**結(jié)尾:*/例:/***...Thisisablockcomment...*/行注釋[格式]開(kāi)頭:///例:///Thisisalinecomment...函數(shù)的摘要[格式]在函數(shù)聲明主體開(kāi)頭的注釋塊中加上控制符:@brief例:/***@brief用于從輸入流讀取一個(gè)字符,不回顯*/intgetch(void);函數(shù)的形參[格式]在函數(shù)聲明主體開(kāi)頭的注釋塊中加上控制符:@param例:/**@parambuf1緩沖區(qū)1@parambuf2緩沖區(qū)2@paramcount字符的個(gè)數(shù)*/intmemcmp(constvoid*buf1,constvoid*buf2,size_tcount);函數(shù)的返回值[格式]在函數(shù)聲明主體開(kāi)頭的注釋塊中加上控制符:@return例1:/***@return讀取的字符*/intgetchar(void);例2:/***@returnNone*/voidrewind(FILE*stream);函數(shù)的注意事項(xiàng)(Remark)[格式]在函數(shù)聲明主體開(kāi)頭的注釋塊中加上控制符:@remark例:/***@remark拷貝strSource到strDestination(包含strSource中的'\0'),要注意在拷貝的過(guò)程中并沒(méi)有溢出檢查*/char*strcpy(char*strDestination,constchar*strSource);補(bǔ)充說(shuō)明Doxygen幾項(xiàng)功能也可以滿(mǎn)足需求了。C/C++代碼書(shū)寫(xiě)規(guī)范每行代碼長(zhǎng)度80ASCII例:HANDLEDNC_OpenFile(constcharcszFileName[],intnMode);或者:BOOLDNC_ReadFile(HANDLEhFile,void*pvBuffer,intnReadSize,int*pnReadSize);合并行的問(wèn)題循環(huán)、分支代碼,判斷條件與執(zhí)行代碼不得在同一行上。例:正確:if(n==-2)n=1;elsen=2;不得寫(xiě)做:If(n==-2)n=1;elsen=2;指針中*號(hào)的位置指針的定義,*號(hào)既可以緊接類(lèi)型,也可以在變量名之前。例:可寫(xiě)做:int*pnsize; //統(tǒng)一使用這種格式也可寫(xiě)做:int*pnsize;但不得寫(xiě)做:int*pnsize;全局函數(shù)的調(diào)用在類(lèi)的成員函數(shù)內(nèi)調(diào)用全局函數(shù)時(shí),在全局函數(shù)名前必須加上“::”。if...elseifelseif必須寫(xiě)在一行。與“{”、“}”有關(guān)的規(guī)定與“{”、“}”有關(guān)代碼的縮進(jìn)格式在“{”Tab之外的其他任何字符;在它之后可有注釋?zhuān)辉试S有代碼。與“{”對(duì)應(yīng)的“}”必須在同一列上。例:正確:for(i=0;i<cbLine;i++){//printf("Line%d:",i);printf("%s\n",pFileLines[i]);}不得寫(xiě)做:for(i=0;i<cb;i++){printf("Line%d:",i);printf("%s\n",pFileLines[i]);}也不得寫(xiě)做:for(i=0;i<cb;i++){printf("Line%d:",i);printf("%s\n",pFileLines[i]);}“{”、“}”的省略在循環(huán)、分支之后若只有一行代碼,在無(wú)歧義的情況下可省略“{”、“}”。例:if(n==-2)n=1;elsen=2;與空格有關(guān)的各項(xiàng)規(guī)定對(duì)兩目、三目運(yùn)算符兩邊的空格的規(guī)定在所有兩目、三目運(yùn)算符的兩邊都必須有空格。在單目運(yùn)算符兩端不必空格。但在“->”、“::”、“.”、“[”、“]”等運(yùn)算符前后,及“&”(取地址)、“*”(取值)等運(yùn)算符之后不得有空格。例:正確:intn=0,nTemp;for(inti=nMinLine;i<=nMaxLine;i++)不得寫(xiě)做:intn=0,nTemp;for(inti=nMinLine;i<=nMaxLine;i++)對(duì)for、while、if等關(guān)鍵字之后空格的規(guī)定for、while、if1個(gè)空格,再接“(”例:正確:if(-2==n)不得寫(xiě)做:if(-2==n)對(duì)調(diào)用函數(shù)、宏時(shí)的空格規(guī)定調(diào)用函數(shù)、宏時(shí),“(”前不得有空格。例:正確:printf("%d\n",nIndex);不得寫(xiě)做:printf("%d\n",nIndex);對(duì)類(lèi)型強(qiáng)制轉(zhuǎn)換時(shí)的空格規(guī)定類(lèi)型強(qiáng)制轉(zhuǎn)換時(shí),“(”“)”前后不得有空格例:可寫(xiě)做:(DNC_File*)pFile;也可寫(xiě)做:(DNC_File*)pFile不得寫(xiě)做:(DNC_File*)pFile(DNC_File*)pFile代碼縮進(jìn)/對(duì)齊使用空格的規(guī)定布局不整齊,BCBC8個(gè)空格變?yōu)橐粋€(gè)BC合入的版本大多會(huì)將縮進(jìn)變亂。4個(gè)空格函數(shù)體相對(duì)函數(shù)名及“{”、“}”例:intpower(intx){return(x*x);}if、else、for、while、do等之后的代碼*/算符,則運(yùn)算符應(yīng)在上一行末尾,而不應(yīng)在下一行的行首。代碼不縮進(jìn)情況switchcase、defaul代碼不縮進(jìn)。例:switch(nID){caseID_PLAY:break;caseID_STOP:break;default:break;}與類(lèi)相關(guān)的.h文件與.cpp文件類(lèi)的定義與實(shí)現(xiàn)原則上,應(yīng)該在一個(gè)單獨(dú)的.h文件中定義一個(gè)類(lèi),在一個(gè)單獨(dú)的.cpp文件中實(shí)現(xiàn)這個(gè)類(lèi)。.h與.cpp文件的文件名必須與類(lèi)名相同。類(lèi)的合并若幾個(gè)類(lèi)的規(guī)模都不大,關(guān)系又很密切,則可在一個(gè).h文件中定義這些類(lèi),在一個(gè).cpp文件中實(shí)現(xiàn)。對(duì)于附屬于較大規(guī)模類(lèi)的一個(gè)很小規(guī)模的類(lèi),可以寫(xiě)在那個(gè)大規(guī)模類(lèi)的.h和.cpp里。對(duì)變量的要求對(duì)變量的要求塊間的耦合度;必要還應(yīng)說(shuō)明與其它變量的關(guān)系;性;防止局部變量與公共變量同名;共變量,防止多個(gè)不同模塊或函數(shù)都可以修改、創(chuàng)建同一公共變量的現(xiàn)象;嚴(yán)禁使用未經(jīng)初始化的變量作為右值;境關(guān)系密切的變量;調(diào)以及代碼維護(hù)等。這種關(guān)系的說(shuō)明可在注釋或文檔中描述。示例:在源文件中,可按如下注釋形式說(shuō)明。RELATIONSystem_InitInput_RecPrint_RecStat_ScoreStudentCreateModifyAccessAccessScoreCreateModifyAccessAccess,Modify注:RELATION為操作關(guān)系;System_Init、Input_Rec、Print_Rec、Stat_Score為四個(gè)不同的函數(shù);Student、Score為兩個(gè)全局變量;Create表示創(chuàng)建,Modify表示修改,AccessInput_Rec、Stat_ScoreScore,故此變量將引起函數(shù)間較大的耦合,并可能增加代碼測(cè)試、維護(hù)的難度。對(duì)變量類(lèi)型的要求Cstatic局部變量將在內(nèi)存“數(shù)據(jù)區(qū)”static局部變量將在“堆棧”中生成。這些細(xì)節(jié)對(duì)程序質(zhì)量的保證非常重要;患;盡量減少?zèng)]有必要的數(shù)據(jù)類(lèi)型默認(rèn)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換;合理地設(shè)計(jì)數(shù)據(jù)并使用自定義數(shù)據(jù)類(lèi)型,避免數(shù)據(jù)間進(jìn)行不必要的類(lèi)型轉(zhuǎn)換;對(duì)編譯系統(tǒng)默認(rèn)的數(shù)據(jù)類(lèi)型轉(zhuǎn)換,也要有充分的認(rèn)識(shí)。對(duì)結(jié)構(gòu)的要求結(jié)構(gòu)的功能要單一設(shè)計(jì)結(jié)構(gòu)時(shí)應(yīng)力爭(zhēng)使結(jié)構(gòu)代表一種現(xiàn)實(shí)事務(wù)的抽象,而不是同時(shí)代表多種。結(jié)構(gòu)中的各元素應(yīng)代表同一事務(wù)的不同側(cè)面,而不應(yīng)把描述沒(méi)有關(guān)系或關(guān)系很弱的不同事務(wù)的元素放到同一結(jié)構(gòu)中。示例:如下結(jié)構(gòu)不太清晰、合理。typedefstructSTUDENT_STRU{unsignedcharname[8];/*student'sname*/unsignedcharage;/*student'sage*/unsignedcharsex;/*student'ssex,asfollows*//*0-FEMALE;1-MALE*/unsignedcharteacher_name[8];/*thestudentteacher'sname*/unisgnedcharteacher_sex;/*histeachersex*/}STUDENT;若改為如下,可能更合理些。typedefstructTEACHER_STRU{unsignedcharname[8];/*teachername*/unisgnedcharsex;/*teachersex,asfollows*//*0-FEMALE;1-MALE*/}TEACHER;typedefstructSTUDENT_STRU{unsignedcharname[8];/*student'sname*/unsignedcharage;/*student'sage*/unsignedcharsex;/*student'ssex,asfollows*//*0-FEMALE;1-MALE*/unsignedintteacher_ind;/*histeacherindex*/}STUDENT;不同結(jié)構(gòu)間的關(guān)系要簡(jiǎn)單若兩個(gè)結(jié)構(gòu)間關(guān)系較復(fù)雜、密切,那么應(yīng)合為一個(gè)結(jié)構(gòu)。示例:如下兩個(gè)結(jié)構(gòu)的構(gòu)造不合理。typedefstructPERSON_ONE_STRU{unsignedcharname[8];unsignedcharaddr[40];unsignedcharsex;unsignedcharcity[15];}PERSON_ONE;typedefstructPERSON_TWO_STRU{unsignedcharname[8];unsignedcharage;unsignedchartel;}PERSON_TWO;由于兩個(gè)結(jié)構(gòu)都是描述同一事物的,那么不如合成一個(gè)結(jié)構(gòu)。typedefstructPERSON_STRU{unsignedcharname[8];unsignedcharage;unsignedcharsex;unsignedcharaddr[40];unsignedcharcity[15];unsignedchartel;}PERSON;函數(shù)的編寫(xiě)要求函數(shù)編寫(xiě)的總體要求明確函數(shù)功能,精確(而不是近似)地實(shí)現(xiàn)函數(shù)設(shè)計(jì);200行以?xún)?nèi)(不包括注釋和空格行);函數(shù)的返回值要清楚、明了,讓使用者不容易忽視錯(cuò)誤情況;方式或強(qiáng)制的轉(zhuǎn)換方式作為返回值返回;有必要的默認(rèn)數(shù)據(jù)類(lèi)型轉(zhuǎn)換或強(qiáng)制數(shù)據(jù)類(lèi)型轉(zhuǎn)換。函數(shù)名的要求函數(shù)名應(yīng)準(zhǔn)確描述函數(shù)的功能。processhandle名,因?yàn)檫@些動(dòng)詞并沒(méi)有說(shuō)明要具體做什么。OOP(名詞是對(duì)象本身)。示例:參照如下方式命名函數(shù)。voidDNC_PrintRecord(unsignedintrec_ind);intDNC_InputRecord(void);unsignedcharDNC_GetCurrentColor(void);函數(shù)參數(shù)的要求在同一項(xiàng)目組應(yīng)明確規(guī)定對(duì)接口函數(shù)參數(shù)的合法性檢查應(yīng)由函數(shù)的調(diào)用者負(fù)防止將函數(shù)的參數(shù)作為工作變量。將函數(shù)的參數(shù)作為工作變量,有可能錯(cuò)誤最后再將該局部變量的內(nèi)容賦給該參數(shù)。示例:下函數(shù)的實(shí)現(xiàn)不太好。voidDNC_SumData(unsignedintnum,int*data,int*sum){unsignedintcount;*sum=0;for(count=0;count<num;count++){*sum+=data[count];//sum成了工作變量,不太好。}}若改為如下,則更好些。voidDNC_SumData(unsignedintnum,int*data,int*sum){unsignedintcount;intsum_temp;sum_temp=0;for(count=0;count<num;count++){sum_temp+=data[count];}*sum=sum_temp;}函數(shù)功能的要求一個(gè)函數(shù)僅完成一件功能。為簡(jiǎn)單功能編寫(xiě)函數(shù)。雖然為僅用一兩行就可完成的功能去編函數(shù)好像沒(méi)有必要,但用函數(shù)可使功能明確化,增加程序可讀性,亦可方便維護(hù)、測(cè)試。示例:如下語(yǔ)句的功能不很明顯。value=(a>b)?a:b;改為如下就很清晰了。intmax(inta,intb){return((a>b)?a:b);}value=max(a,b);解、測(cè)試、維護(hù)等變得困難。函數(shù)的功能應(yīng)該是可以預(yù)測(cè)的,也就是只要輸入數(shù)據(jù)相同就應(yīng)產(chǎn)生同樣的輸出??芍厝牒瘮?shù)編寫(xiě)(C/C++auto即缺省態(tài)局部變量或寄存器變量+語(yǔ)言的可重入static可重入性。編寫(xiě)可重入函數(shù)時(shí),若使用全局變量,則應(yīng)通過(guò)關(guān)中斷、信號(hào)量(P、V作可知狀態(tài)。ExamintSqure_ExamExam平方值。那么如下函數(shù)不具有可重入性。unsignedintexample(intpara){unsignedinttemp;Exam=para;//(**)temp=Square_Exam(returntemp;}此函數(shù)若被多個(gè)進(jìn)程調(diào)用的話,其結(jié)果可能是未知的,因?yàn)楫?dāng)(**)語(yǔ)句剛執(zhí)行完后,另外一個(gè)使用本函數(shù)的進(jìn)程可能正好被激活,那么當(dāng)新激活的進(jìn)程執(zhí)行到此函數(shù)時(shí),將使Exam賦與另一個(gè)不同的para值,所以當(dāng)控制重新回到“temp=Square_Exam()”后,計(jì)算出的temp很可能不是預(yù)想中的結(jié)果。此函數(shù)應(yīng)如下改進(jìn)。unsignedintexample(intpara){unsignedinttemp;[申請(qǐng)信號(hào)量操作]//若申請(qǐng)不到“信號(hào)量”,說(shuō)明另外的進(jìn)程正處于Exampara;//Exam賦值并計(jì)算其平方過(guò)程中(即正在使用此tempSquare_Exam//信號(hào)),本進(jìn)程必須等待其釋放信號(hào)后,才可繼[釋放信號(hào)量操作]//續(xù)執(zhí)行。若申請(qǐng)到信號(hào),則可繼續(xù)執(zhí)行,但其//號(hào)。returntemp;}C/C++程序效率的要求編程時(shí)要經(jīng)常注意代碼的效率。代碼效率分為全局效率、局部效率、時(shí)間效率及空間效率局部效率應(yīng)為全局效率服務(wù),不能因?yàn)樘岣呔植啃识鴮?duì)全局效率造成影響。效率。這種方式是解決軟件空間效率的根本辦法。仔細(xì)分析有關(guān)算法,并進(jìn)行優(yōu)化。(提高程序效率。避免循環(huán)體內(nèi)含判斷語(yǔ)句,應(yīng)將循環(huán)語(yǔ)句置于判斷語(yǔ)句的代碼塊之中。盡量用乘法或其它方法代替除法,特別是浮點(diǎn)運(yùn)算中的除法。不要一味追求緊湊的代碼。說(shuō)明:因?yàn)榫o湊的代碼并不代表高效的機(jī)器碼。C/C++代碼質(zhì)量的要求代碼質(zhì)量保證優(yōu)先原則正確性,指程序要實(shí)現(xiàn)設(shè)計(jì)要求的功能。穩(wěn)定性、安全性,指程序穩(wěn)定、可靠、安全??蓽y(cè)試性,指程序要具有良好的可測(cè)試性。規(guī)范/可讀性,指程序書(shū)寫(xiě)風(fēng)格、命名規(guī)則等要符合規(guī)范。全局效率,指軟件系統(tǒng)的整體效率。局部效率,指某個(gè)模塊/子模塊/函數(shù)的本身效率。個(gè)人表達(dá)方式/個(gè)人方便性,指?jìng)€(gè)人編程習(xí)慣。對(duì)內(nèi)存及句柄操作的要求只引用屬于自己的存貯空間。若模塊封裝的較好,那么一般不會(huì)發(fā)生非法引用他人的空間。防止引用已經(jīng)釋放的內(nèi)存空間。在實(shí)際編程過(guò)程中,稍不留心就會(huì)出現(xiàn)在一(C語(yǔ)言指針過(guò)程/函數(shù)中分配的內(nèi)存,在過(guò)程/函數(shù)退出之前要釋放。過(guò)程/函數(shù)中申請(qǐng)的(為打開(kāi)文件而使用的)文件句柄,在過(guò)程/函數(shù)退出之前注意就有可能發(fā)生。這類(lèi)錯(cuò)誤往往會(huì)引起很?chē)?yán)重后果,且難以定位。示例:下函數(shù)在退出之前,沒(méi)有把分配的內(nèi)存釋放。typedefunsignedcharBYTE;intDNC_ExampleFun(BYTEgt_len,BYTE*gt_code){BYTE*gt_buf;gt_buf=(BYTE*)malloc(MAX_GT_LENGTH);//programcode,includecheckgt_bufifornotNULL./*globaltitlelengtherror*/if(gt_len>MAX_GT_LENGTH){returnGT_LENGTH_ERROR//gt_buf}//otherprogramcode}應(yīng)改為如下。intDNC_ExampleFun(BYTEgt_len,BYTE*gt_code){BYTE*gt_buf;gt_buf=(BYTE*)malloc(MAX_GT_LENGTH);//programcode,includecheckgt_bufifornotNULL./*globaltitlelengtherror*/if(gt_len>MAX_GT_LENGTH){free(gt_buf//gt_bufreturnGT_LENGTH_ERROR;}//otherprogramcode}些操作時(shí)一定要仔細(xì)小心。101-10程序存在問(wèn)題。#defineMAX_USR_NUM10unsignedcharusr_login_flg[MAX_USR_NUM]="";voidDNC_SetUsrLoginFlg(unsignedcharusr_no){if(!usr_login_flg[usr_no]){usr_login_flg[usr_no]=TRUE;}}當(dāng)usr_no為10時(shí),將使用usr_login_flg越界。可采用如下方式解決。voidDNC_SetUsrLoginFlg(unsignedcharusr_no){if(!usr_login_flg[usr_no-1]){usr_login_flg[usr_no-1]=TRUE;}}其他要求容易使系統(tǒng)進(jìn)入混亂狀態(tài)和不可知狀態(tài)。嚴(yán)禁隨意更改其它模塊或系統(tǒng)的有關(guān)設(shè)置和配置。編程時(shí),不能隨心所欲地更改不屬于自己模塊的有關(guān)設(shè)置如常量、數(shù)組的大小等。不能隨意改變與其它模塊的接口。充分了解系統(tǒng)的接口之后,再使用系統(tǒng)提供的功能。1“<=”誤寫(xiě)成“<”或“>=”成“>”等造成的,由此引起的后果,很多情況下是很?chē)?yán)重的,所以編程時(shí),一定要在這些地方小心。當(dāng)編完程序后,應(yīng)對(duì)這些操作符進(jìn)行徹底檢查。C/C++中的“=”與“==”“|”與“||”、“&”與“&&”等,若拼寫(xiě)錯(cuò)了,編譯器不一定能夠檢查出來(lái)。有可能的話,ifelseelse分支的語(yǔ)句要小心對(duì)待;switch語(yǔ)句必須有default分支。gotogoto語(yǔ)句會(huì)破壞程序的結(jié)構(gòu)性,所以除非確實(shí)需要,最goto語(yǔ)句。件的可移植性和可重用性。除非為了滿(mǎn)足特殊需求,避免使用嵌入式匯編。程序中嵌入式匯編,一般都對(duì)可移植性有較大的影響。精心地構(gòu)造、劃分子模塊,并按“接口”部分及“內(nèi)核”部分合理地組織子模塊,以提高“內(nèi)核”是對(duì)以后產(chǎn)品的升級(jí)都會(huì)有很大幫助。精心構(gòu)造算法,并對(duì)其性能、效率進(jìn)行測(cè)試。對(duì)較關(guān)鍵的算法最好使用其它算法來(lái)確認(rèn)。時(shí)刻注意表達(dá)式是否會(huì)上溢、下溢。使用變量時(shí)要注意其邊界值的情況。(否超出系統(tǒng)有關(guān)限制。系統(tǒng)出錯(cuò)情況。(如用戶(hù)誤操作等補(bǔ)救。(據(jù)、硬件等的安全構(gòu)成危害,以提高系統(tǒng)的安全性。充分了除非必要,不要使用不熟悉的第三方工具包與控件。使用工具包與控件,可(多語(yǔ)言版本支持DLL獨(dú)的描述文件(如數(shù)據(jù)庫(kù)格式)C/C++代碼測(cè)試與維護(hù)單元測(cè)試要求至少達(dá)到語(yǔ)句覆蓋。單元測(cè)試開(kāi)始要跟蹤每一條語(yǔ)句,并觀察數(shù)據(jù)流及變量的變化。清理、整理或優(yōu)化后的代碼要經(jīng)過(guò)審查及測(cè)試。代碼版本升級(jí)要經(jīng)過(guò)嚴(yán)格測(cè)試。使用工具軟件對(duì)代碼版本進(jìn)行維護(hù)。正式版本上軟件的任何修改都應(yīng)有詳細(xì)的文檔記錄。發(fā)現(xiàn)錯(cuò)誤立即修改,并且要記錄下來(lái)。關(guān)鍵的代碼在匯編級(jí)跟蹤。的效率。盡可能模擬出程序的各種出錯(cuò)情況,對(duì)出錯(cuò)處理代碼進(jìn)行充分的測(cè)試。仔細(xì)測(cè)試代碼處理數(shù)據(jù)、變量的邊界情況。保留測(cè)試信息,以便分析、總結(jié)經(jīng)驗(yàn)及進(jìn)行更充分的測(cè)試。不應(yīng)通過(guò)“試”來(lái)解決問(wèn)題,應(yīng)尋找問(wèn)題的根本原因。對(duì)自動(dòng)消失的錯(cuò)誤進(jìn)行分析,搞清楚錯(cuò)誤是如何消失的。修改錯(cuò)誤不僅要治表,更要治本。測(cè)試時(shí)應(yīng)設(shè)法使很少發(fā)生的事件經(jīng)常發(fā)生。明確模塊或函數(shù)處理哪些事件,并使它們經(jīng)常發(fā)生。問(wèn)題。(的“內(nèi)部寄存器”等),讓函數(shù)運(yùn)行的結(jié)果可預(yù)測(cè),并使出現(xiàn)的錯(cuò)誤可再現(xiàn)。C/C++源代碼程序命名規(guī)范本規(guī)范給出了工程、文件、函數(shù)、變量、類(lèi)/結(jié)構(gòu)、宏、常量、枚舉、聯(lián)合等的命名規(guī)范??傮w命名要求該名字描述的是中文特有的內(nèi)容,如半角、全角,聲母、韻母等。所有命名都應(yīng)遵循達(dá)意原則,即名稱(chēng)應(yīng)含義清晰、明確。所有命名都不易過(guò)長(zhǎng),應(yīng)控制在規(guī)定的最大長(zhǎng)度以?xún)?nèi)。所有命名都應(yīng)盡量使用全稱(chēng)。如果命名使用縮寫(xiě),則應(yīng)該使用《通用縮寫(xiě)表》(見(jiàn)最后一節(jié))中的縮寫(xiě);原則說(shuō)明。具體命名規(guī)范工程名工程名不強(qiáng)制統(tǒng)一。文件名只能由英文字母、數(shù)字和下劃線組成文件名。區(qū)分大小寫(xiě),基于跨平臺(tái)的考慮,建議全小寫(xiě)。30個(gè)字符。如果文件用于定義或?qū)崿F(xiàn)類(lèi),則文件名應(yīng)與類(lèi)名必須保持一致。函數(shù)名WindowsAPI的命名規(guī)范。64個(gè)字符。推薦使用動(dòng)賓結(jié)構(gòu)。函數(shù)名應(yīng)清晰反映函數(shù)的功能、用途。推薦函數(shù)名第一個(gè)字母大寫(xiě)。變量名+類(lèi)型+32個(gè)英文字符。格式:[m_|s_|g_]type[classname|structname]variablename解釋?zhuān)骸_:類(lèi)的成員變量·ms_:類(lèi)的靜態(tài)成員變量·s_:靜態(tài)全局變量·g_:普通全局變量類(lèi)型縮寫(xiě)(type)·char,TCHAR:c/chs/sz/str·bool,BOOL:b·int,int16,int32,int64:n·unsigned:u·long:l·unsignedlong:ul·double,float:f·BYTE:by·WORD:w·DWORD:dw·function:fn·pointer:p小范圍局部變量與結(jié)構(gòu)成員可省略類(lèi)型縮寫(xiě)。類(lèi)名必須以大寫(xiě)"C"開(kāi)頭,后面字母反映具體含義,以清晰表達(dá)類(lèi)的用途和功能為原則。接口必須以大寫(xiě)"I"Interface。當(dāng)名稱(chēng)由多個(gè)單詞構(gòu)成時(shí),每一個(gè)單詞的第一個(gè)字母必須大寫(xiě)。結(jié)構(gòu)、宏、枚舉及聯(lián)合的名字結(jié)構(gòu)、宏、枚舉以及聯(lián)合的名字必須全部大寫(xiě)。具有互斥意義的變量或相反動(dòng)作的函數(shù)的命名一些在軟件中常用的反義詞組。add/remove begin/end create/destroyinsert/delete first/last get/releaseincrement/decrementput/getadd/deletelock/unlockopen/closemin/maxold/newstart/stopnext/previoussource/targetshow/hidesend/receivecut/pastesource/destination示例:up/downintmin_sum;intmax_sum;intadd_user(BYTE*user_name);intdelete_user(BYTE*user_name);對(duì)命名中下劃線的使用規(guī)定除了編譯開(kāi)關(guān)/頭文件等特殊應(yīng)用,應(yīng)避免使用_EXAMPLE_TEST_之類(lèi)以下劃線開(kāi)始和結(jié)尾的定義。程序開(kāi)發(fā)中相關(guān)文檔撰寫(xiě)規(guī)定程序開(kāi)發(fā)中相關(guān)文檔的撰寫(xiě)是對(duì)程序設(shè)計(jì)、使用、測(cè)試和問(wèn)題記錄的一個(gè)總結(jié),是他人熟悉、掌握和運(yùn)用(使用、升級(jí)和修改)程序的基礎(chǔ),也是一個(gè)程序軟件的生命力所在之處。程序設(shè)計(jì)與開(kāi)發(fā)文檔程序設(shè)計(jì)與開(kāi)發(fā)文檔是整個(gè)軟件系統(tǒng)的總體構(gòu)成和開(kāi)發(fā)的內(nèi)容,應(yīng)體現(xiàn)系統(tǒng)的完整性和易讀性。軟件的開(kāi)發(fā)背景簡(jiǎn)要介紹軟件程序的開(kāi)發(fā)背景及其要實(shí)現(xiàn)的功能,并給出文檔中出現(xiàn)的符號(hào)的詳細(xì)說(shuō)明。軟件的結(jié)構(gòu)設(shè)計(jì)軟件的結(jié)構(gòu)設(shè)計(jì)主要體現(xiàn)整個(gè)系統(tǒng)軟件的總體架構(gòu),按功能模塊進(jìn)行劃分,給出每個(gè)模塊的功能及模塊間交換的數(shù)據(jù)項(xiàng),并附圖加以說(shuō)明。在此基礎(chǔ)之上給出整個(gè)軟件的流程圖。數(shù)據(jù)及資源文件說(shuō)明數(shù)據(jù)用途本節(jié)中給出所編寫(xiě)運(yùn)行時(shí)需要的數(shù)據(jù)文件和資源文件的格式及來(lái)源。數(shù)據(jù)文件的后綴格式(如*.dat,*.txt等等)和數(shù)據(jù)文件的用途,可通過(guò)列表給出。數(shù)據(jù)格式(或行)元素所代表的內(nèi)容及量綱。程序結(jié)構(gòu)設(shè)計(jì)與開(kāi)發(fā)功能,并對(duì)類(lèi)中重要的函數(shù)和變量進(jìn)行說(shuō)明,并給出每個(gè)模塊的具體流程圖。程序使用文檔程序使用文檔是保證軟件程序在不同的機(jī)器上運(yùn)行或者是非開(kāi)發(fā)人員運(yùn)行軟件程序的基礎(chǔ),是軟件程序的使用手冊(cè),應(yīng)盡量詳細(xì)。軟件系統(tǒng)的程序組成詳細(xì)給出所開(kāi)發(fā)軟件的程序組成及功能,可列表給出。要求將程序文件夾中的每一個(gè)文件都要列出,并給出相應(yīng)的功能。在此基礎(chǔ)上給出各個(gè)程序間的調(diào)用關(guān)系和配置關(guān)系,即如何操作才能使軟件程序正常運(yùn)行。開(kāi)發(fā)環(huán)境要求、軟件安裝及環(huán)境配置WindowsXPVC++6.0OpenCV對(duì)于軟件開(kāi)發(fā)中使用的開(kāi)發(fā)包的情況,要說(shuō)明使用的版本號(hào)、獲取方法和安裝方式等。另外,還要說(shuō)明該開(kāi)發(fā)包有沒(méi)有替代品。軟件運(yùn)行最低配置要求運(yùn)行環(huán)境:中文WindowsNT操作系統(tǒng)CPU:2.0GHz以上內(nèi)存要求:1G內(nèi)存以上顯示卡最小設(shè)置:16色顯示器:17寸以上彩顯數(shù)據(jù)接口:鍵盤(pán)鼠標(biāo)輸入,文件輸入輸出,顯示器輸出VC++6.0應(yīng)用軟件的安裝及配置VC++6.0應(yīng)用軟件的安裝及配置過(guò)程(略。OpenCV的安裝及配置Stept1OpenCV安裝程序OpenCVC:\Program(OpenCV1.0rc1OpenCV1.0在安裝時(shí)選擇"將\OpenCV\bin入系統(tǒng)變量"(Add\OpenCV\bintothesystermPATH),1所示。Stept2Windows環(huán)境變量C:\ProgramFiles\OpenCV\bin2Windows(或重啟后重新登陸才生效。(explorer.exe)Stept3VisualC++6.0環(huán)境的全局配置VisualC++6.0Tools->Options->DirectorieslibLibraryfiles3(a)所示。C:\ProgramFiles\OpenCV\lib然后選擇includefiles,在下方填入路徑:C:\ProgramFiles\OpenCV\cxcore\includeC:\ProgramFiles\OpenCV\cv\includeC:\ProgramFiles\OpenCV\cvaux\includeC:\ProgramFiles\OpenCV\ml\includeC:\ProgramFiles\OpenCV\otherlibs\highguiC:\ProgramFiles\OpenCV\otherlibs\cvcam\includeStept4:對(duì)VisualC++6.0環(huán)境的項(xiàng)目配置OpenCVVCProject給出如何獲取libSettingfor選為All2OpenCV環(huán)境變量的設(shè)置linkObject/librarymodulescxcore.libcv.libml.libcvaux.libhighgui.libcvcam.lib如果你不需要這么多l(xiāng)ib,你可以只添加你需要的lib,如圖3(b)所示。Stept5DirectXSDK及其配置DirectXSDK及其配置過(guò)程(略。(a) (b)圖3VC++6.0全局和項(xiàng)目環(huán)境設(shè)置軟件系統(tǒng)的使用方法根據(jù)所開(kāi)發(fā)的軟件系統(tǒng)的功能給出具體操作的過(guò)程,所有的功能都需要給出操作的過(guò)程,從數(shù)據(jù)輸入到結(jié)果輸出。以實(shí)驗(yàn)室開(kāi)發(fā)的四組合導(dǎo)航仿真軟件的數(shù)據(jù)加載及其顯示為例給出軟件具體操作方法。在菜單中選擇“數(shù)字地圖(M)”今“地圖生成(G)”今“真實(shí)地圖(R)…”5或者點(diǎn)擊工具欄的“”。彈出加載真實(shí)地圖對(duì)話框,選擇地圖文件和地形紋理文件,如圖6所示。加載了真實(shí)地圖后,數(shù)據(jù)顯示區(qū)域會(huì)顯示當(dāng)前狀態(tài)及加載的地形數(shù)據(jù)的參數(shù),如圖7所示。圖5加載真實(shí)數(shù)字地圖菜單圖7加載真實(shí)數(shù)字地圖后的數(shù)據(jù)顯示區(qū)域“數(shù)字地圖(M)”今“地圖顯示(S)”今“三維地形圖如圖8所示或者在工具欄上點(diǎn)擊“”彈出地形三維顯示對(duì)話框選擇顯示模式和9所示。顯示方式包括“鳥(niǎo)瞰”和“漫游”兩種,分別對(duì)地圖進(jìn)行全貌顯示和三維漫游顯示;可以設(shè)定顯示的步長(zhǎng),以設(shè)定動(dòng)畫(huà)演示的精細(xì)程度;還可以設(shè)置10圖8數(shù)字地圖三維顯示菜單圖10數(shù)字地圖三維顯示界面程序測(cè)試文檔軟件程序開(kāi)發(fā)完后需要對(duì)軟件進(jìn)行測(cè)試,測(cè)試軟件的各項(xiàng)功能,為軟件的修開(kāi)提供參考意見(jiàn)。需要包括以下幾部分內(nèi)容。測(cè)試環(huán)境給出軟件測(cè)試程序的測(cè)試環(huán)境,形式可參照5.1節(jié)中軟件系統(tǒng)的開(kāi)發(fā)環(huán)境。軟件測(cè)試項(xiàng)目和功能給出軟件需要測(cè)試哪些項(xiàng)目和功能。軟件測(cè)試數(shù)據(jù)及格式給出軟件測(cè)試時(shí)用到的數(shù)據(jù)及其格式。軟件測(cè)試過(guò)程給出軟件測(cè)試的詳細(xì)過(guò)程及每一步得到的結(jié)果,具體可參照5.2節(jié)的軟件使用方法。軟件程序調(diào)試文檔軟件程序開(kāi)發(fā)與調(diào)試文檔是在整個(gè)軟件開(kāi)發(fā)過(guò)程中記錄遇到的問(wèn)題及解決的方法和調(diào)試過(guò)程,便于他人學(xué)習(xí)時(shí)方便地解決類(lèi)似問(wèn)題。具體形式可參照如下形式。問(wèn)題一:虛擬機(jī)下創(chuàng)造可連接外網(wǎng)的環(huán)境問(wèn)題:?jiǎn)栴}產(chǎn)生:apache服務(wù)器對(duì)機(jī)器的網(wǎng)絡(luò)設(shè)置要求和連接外網(wǎng)對(duì)機(jī)器的網(wǎng)絡(luò)設(shè)置要求相同,故可通過(guò)使機(jī)器連接外網(wǎng)的方式設(shè)置apache服務(wù)器使其正常運(yùn)行。+HatLinux9.0+虛擬機(jī)軟件:VmwareWorkstation5.0雙系統(tǒng):Windowsxpsp3+fedora8連接外網(wǎng)??赏ㄟ^(guò)以下步驟進(jìn)行:關(guān)閉宿主機(jī)防火墻,然后在宿主機(jī)中設(shè)置允許虛擬機(jī)虛擬的NetworkAdapterVmnet8”通過(guò)“本地連接”共享連接網(wǎng)絡(luò)。Ts
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年財(cái)會(huì)崗位測(cè)試題及答案
- 2025年針推專(zhuān)業(yè)面試題及答案
- 2025年創(chuàng)新實(shí)驗(yàn)考試試題及答案
- 2025年貴州鄉(xiāng)村振興考試試題及答案
- 主管護(hù)師外科復(fù)習(xí)測(cè)試題
- 2025年甘孜旅游面試試題及答案
- 2025年記錄控制程序試題及答案
- 2025年工會(huì)醫(yī)院面試試題及答案
- 等級(jí)保護(hù)測(cè)評(píng)項(xiàng)目管理制度范文
- 2025年學(xué)前游戲論考試題及答案
- (一模)哈三中2025屆高三第一次模擬考試 語(yǔ)文試題(含答案)
- 2025年湖南司法警官職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)審定版
- 2023版《思想道德與法治》(緒論-第一章)緒論 擔(dān)當(dāng)復(fù)興大任 成就時(shí)代新人;第一章 領(lǐng)悟人生真諦 把握人生方向 第3講 創(chuàng)造有意義的人生
- HGT 20714-2023 管道及儀表流程圖(P ID)安全審查規(guī)范 (正式版)
- 《三氣周瑜》兒童故事繪本ppt課件(圖文演講)
- 兵團(tuán)科技管理信息系統(tǒng)PPT課件
- 來(lái)料檢驗(yàn)報(bào)告表格(1)(共1頁(yè))
- 國(guó)家職業(yè)技能標(biāo)準(zhǔn) (2020年版) 航空發(fā)動(dòng)機(jī)制造工
- 徹卻----劉立千居士文集
- 泵站自動(dòng)化系統(tǒng)的運(yùn)行現(xiàn)況與及發(fā)展建議
- 畢業(yè)設(shè)計(jì)(論文)濃縮機(jī)設(shè)計(jì)(含完整CAD圖紙)
評(píng)論
0/150
提交評(píng)論