版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語言程序編寫標(biāo)準(zhǔn)草稿版 本 號(hào): 0.9.5 編 制 人: 全 永 兵 修改日期: 2010-06-02 浙江達(dá)峰科技目 錄 TOC o 1-3 h z HYPERLINK l _Toc263196850 1箴言 PAGEREF _Toc263196850 h 3 HYPERLINK l _Toc263196851 2本方案設(shè)計(jì)目標(biāo) PAGEREF _Toc263196851 h 4 HYPERLINK l _Toc263196852 3程序編寫標(biāo)準(zhǔn) PAGEREF _Toc263196852 h 5 HYPERLINK l _Toc263196853 3.1命名標(biāo)準(zhǔn) PAGEREF _To
2、c263196853 h 6 HYPERLINK l _Toc263196854 通那么 PAGEREF _Toc263196854 h 6 HYPERLINK l _Toc263196855 文件名命名標(biāo)準(zhǔn) PAGEREF _Toc263196855 h 6 HYPERLINK l _Toc263196856 函數(shù)名命名標(biāo)準(zhǔn) PAGEREF _Toc263196856 h 7 HYPERLINK l _Toc263196857 變量名命名標(biāo)準(zhǔn) PAGEREF _Toc263196857 h 7 HYPERLINK l _Toc263196858 宏定義命名標(biāo)準(zhǔn) PAGEREF _Toc263
3、196858 h 8 HYPERLINK l _Toc263196859 3.2注釋標(biāo)準(zhǔn) PAGEREF _Toc263196859 h 10 HYPERLINK l _Toc263196860 總體原那么 PAGEREF _Toc263196860 h 10 HYPERLINK l _Toc263196861 文件注釋內(nèi)容 PAGEREF _Toc263196861 h 10 HYPERLINK l _Toc263196862 模塊注釋內(nèi)容 PAGEREF _Toc263196862 h 11 HYPERLINK l _Toc263196863 函數(shù)注釋 PAGEREF _Toc263196
4、863 h 11 HYPERLINK l _Toc263196864 程序中得注釋內(nèi)容 PAGEREF _Toc263196864 h 12 HYPERLINK l _Toc263196865 3.3編程風(fēng)格 PAGEREF _Toc263196865 h 15 HYPERLINK l _Toc263196866 3.4質(zhì)量保證 PAGEREF _Toc263196866 h 21 HYPERLINK l _Toc263196867 3.5程序效率 PAGEREF _Toc263196867 h 23 HYPERLINK l _Toc263196868 3.6模塊(文件)劃分標(biāo)準(zhǔn) PAGERE
5、F _Toc263196868 h 26 HYPERLINK l _Toc263196869 4主程序框圖 PAGEREF _Toc263196869 h 29 HYPERLINK l _Toc263196870 5變量名、模塊名稱英文縮寫 PAGEREF _Toc263196870 h 31箴言程序設(shè)計(jì)絕對(duì)是一門藝術(shù),而不僅僅是一門技術(shù)。首先程序設(shè)計(jì)得出發(fā)點(diǎn)是,是給別人看,可讀、易理解、好維護(hù),如果你得程序只能自己來維護(hù),到你離開這個(gè)程序時(shí),你程序也就與你一起離開了這個(gè)世界。為了可讀、易理解、好維護(hù),你得程序要有好得設(shè)計(jì),而不是一接手就進(jìn)行東抄抄、西抄抄得寫代碼工作。寫代碼是一個(gè)工程,程序設(shè)
6、計(jì)是一種藝術(shù);如果程序員只注重代碼,那就象蓋房子時(shí)得砌磚匠,只知道照?qǐng)D施工而已。世界那么多令人嘆為觀止得美麗建筑物,那是設(shè)計(jì)家得藝術(shù)杰作,而不是砌磚匠得藝術(shù)杰作。Keep It Easy Read and Right (from ibm readbooks)Sometimes good style and efficient runtime performance do not mix. Wherever you face a conflict between the two, choose good style. Hard-to-read programs arehard to debug,
7、 hard to maintain, and hard to get right.Program correctness must always win out over speed.Make it right before you make it faster.Keep it right when you make it faster.Make it clear before you make it faster.Do not sacrifice clarity for small gains in efficiency.Keep It Simle and StupidKnowledge I
8、ntergration is Supper Skill What I hear I forget, What I see I remember, What I do I understand.whatever style you use, please use it consistently, since a mixture of styles within one program tends to look ugly. If you are contributing changes to an existing program, please follow the style of that
9、 program. 本方案設(shè)計(jì)目標(biāo)標(biāo)準(zhǔn)性:做到從變量命名、函數(shù)命名到模塊劃分全部有標(biāo)準(zhǔn)可依,使非編程本人也可以正確、快速、無誤地修改軟件,使公司真正能保存住技術(shù);硬件無關(guān)性:與硬件有關(guān)得函數(shù)單獨(dú)處理,而主程序那么通過調(diào)用這些函數(shù)來對(duì)MCU端口進(jìn)行操作,這樣無論使用什么MCU,只要支持C語言,都可以很快地將程序移植過來,使軟件不再受MCU得控制;可擴(kuò)展性:流程確定后,如果有新得模塊參加,不會(huì)改動(dòng)整個(gè)系統(tǒng)流程,只需在程序中參加此模塊得調(diào)用,修改與此模塊有關(guān)得函數(shù)即可;模塊化:將整個(gè)軟件程序分為假設(shè)干個(gè)模塊,模塊之間通過全局變量相連,只要確定了模塊得輸入/出變量以及模塊流程,此模塊在經(jīng)過詳細(xì)測(cè)試后便
10、可保證不再出錯(cuò),如有新得程序需要編寫,只需編寫新得模塊即可,真正使軟件錯(cuò)誤不會(huì)重復(fù)出現(xiàn);可移植性:本方案中所定義得模塊可以嵌入至任意一個(gè)系統(tǒng),在編制一個(gè)新得系統(tǒng)前,首先將與系統(tǒng)有關(guān)得函數(shù)調(diào)用過來即可,因此本方案中得很多內(nèi)容不但適合空調(diào)系統(tǒng),同時(shí)也可直接調(diào)入其他系統(tǒng)中;程序編寫標(biāo)準(zhǔn)編程首要是要考慮程序得可行性,然后是可讀性、可移植性、健壯性以及可測(cè)試性。這是總那么。但是很多人只完成了程序得根本功能,即只完成了可行性,忽略了可讀性、可移植性和健壯性,這給日后得調(diào)試和維護(hù)帶來非常大得困難。為了提高程序得可讀性,就必須遵從一定得標(biāo)準(zhǔn)來編寫程序??梢浦残砸部梢允鼓阍诰帉戭愃频贸绦虻脮r(shí)候起到事半功倍得效果
11、。也許開始得時(shí)間按標(biāo)準(zhǔn)編寫程序會(huì)很不習(xí)慣,但要記?。喝绻麤]有很好得命名標(biāo)準(zhǔn)和很好編程風(fēng)格,即使是你自己編得程序,日后讀起來也會(huì)一樣得困難;而好得命名標(biāo)準(zhǔn)和很好編程風(fēng)格將使你在調(diào)試程序時(shí)做到一目了然,從而減少了調(diào)試時(shí)間。本標(biāo)準(zhǔn)規(guī)定了包括命名標(biāo)準(zhǔn)、注釋標(biāo)準(zhǔn)、編寫風(fēng)格等內(nèi)容。程序編寫人在編寫程序時(shí)要嚴(yán)格遵照此標(biāo)準(zhǔn)進(jìn)行。以下內(nèi)容摘自清華大學(xué)網(wǎng)絡(luò)研究室 ?C語言編程講義?魯棒 - Solid and Robust Code簡(jiǎn)潔 - Maintainable and Simple Code高效 - Fast Code簡(jiǎn)短 - Small Code共享 - Re-usable Code可測(cè)試 - Testa
12、ble Code可移植 - Portable Code “寫好代碼得10個(gè)秘訣微軟,林斌Where Good Codes come from?The pursuit of perfectionResponsible for your codeIts my babyThe code is not written for yourselfTo work with other peopleTo share with other peopleWork hard, and work smartlyThink more, code lessTry to use more toolsWhy Microsof
13、t is so rich?5000 people work together (Windows2000)50,000,000 lines of code (Windows2000)a open environmentShare good ideas with other peopleThere is no free meal!Experience is more importantGood design comes from good designerSenior programmer: 5 yearsTeam leader: 10 yearsNo end for perfection以上內(nèi)容
14、摘自清華大學(xué)網(wǎng)絡(luò)研究室 ?C語言編程講義?命名標(biāo)準(zhǔn)通那么程序中變量名稱 = 變量得前綴 + 代表變量含意得英文單詞或單詞縮寫 + 后綴:無論是變量名,模塊函數(shù)名稱或宏名稱,都是由“前綴加“功能名稱加“后綴三局部組成得,其中后綴可以省略。名稱使用英文單詞或英文縮寫,其中本行業(yè)使用得英文縮寫見第六節(jié)?變量名、模塊名稱英文縮寫表?;文件名稱不受此限制;為方便閱讀,組成變量名和函數(shù)名得英文單詞建議不多于3個(gè);在所有命名中,都應(yīng)使用標(biāo)準(zhǔn)得英文單詞或縮寫。不得使用拼音或拼音縮寫,如壓縮機(jī)使用Compressor或CMP,而不能使用Ysj;所有命名都應(yīng)遵循達(dá)意原那么,即名稱應(yīng)含義清晰、明確;所有命名都不易過
15、長(zhǎng),變量名應(yīng)小于等于20字符,函數(shù)名和文件名應(yīng)小于等于30字符;可以使用簡(jiǎn)寫得命名盡量使用簡(jiǎn)寫,如壓縮機(jī)使用簡(jiǎn)寫CMP來代替整個(gè)單詞Compressor。如果命名使用縮寫,那么應(yīng)該使用?變量名、模塊名稱英文縮寫表?中得縮寫;原那么上不推薦使用?變量名、模塊名稱英文縮寫表?以外得縮寫,如果使用,那么必須對(duì)其進(jìn)行注釋和說明;當(dāng)名稱由多個(gè)單詞構(gòu)成時(shí),每一個(gè)單詞得第一個(gè)字母必須大寫;宏定義要求全部大寫。文件名命名標(biāo)準(zhǔn)一個(gè)工程可以包含以下文件:與硬件有關(guān)得文件,命名規(guī)那么如下:Hardware.c, Hardware.h,主要包括延時(shí)函數(shù),喂狗程序,初始化MCU 特殊存放器設(shè)置,定時(shí)器設(shè)置,外部中斷設(shè)置
16、,AD檢測(cè)函數(shù),PWM輸出等。這些函數(shù)都是和硬件息息相關(guān)得,更改MCU得時(shí)候需要全部改寫此文件Io_define.h:主要包括各個(gè)IO口得定義,如#define OUT_595_SCKPC_OUT3更改MCU得時(shí)候需要全部改寫此文件主文件,命名規(guī)那么如下:main.c;main.h,主文件中一般只包括對(duì)各個(gè)模塊函數(shù)得定義和根本得定時(shí)器中斷函數(shù),功能得實(shí)現(xiàn)全部在模塊文件中完成。通用函數(shù)文件指可以在多個(gè)程序中共享代碼得文件,一般要求這些文件不使用外部變量,外部文件也不能直接訪問此文件得內(nèi)部變量,要訪問得話通過函數(shù)來調(diào)用,即變量與函數(shù)全部封裝在文件中,對(duì)外界來說整個(gè)文件是個(gè)黑匣子,外界不需知道內(nèi)部得
17、實(shí)現(xiàn)過程,只需知道調(diào)用方法即可,命名可自定義,原那么上以能說明此文件主要功能為宜,如RTC_Dals.c表示Dallas公司得時(shí)鐘文件、EEPATM08.c表示Atmel公司得EEPRom文件等;文件命名不區(qū)分大小寫,但建議每個(gè)單獨(dú)得單詞得第一個(gè)字母大寫,廠家名稱縮寫全部大寫;文件命名長(zhǎng)度不限于8.3格式;注:公司已存在一些通用模塊文件,里面包含已經(jīng)測(cè)試過得常用到得函數(shù),推薦在編寫程序時(shí)使用這些文件。函數(shù)名命名標(biāo)準(zhǔn)模塊是實(shí)現(xiàn)不同功能得子程序,其以“f_做為前綴,后面接模塊功能名稱。注意“f_中得f應(yīng)為小寫字母。f取自Function得第一個(gè)字母。建議模塊功能以“動(dòng)-名結(jié)構(gòu)排列,即動(dòng)詞在前,名詞
18、在后,來表示處理某個(gè)事件。如處理遙控器接收模塊使用“f_DealRMC作為子程序名稱。函數(shù)名應(yīng)清晰反映函數(shù)得功能、用途,不能引起歧異。與硬件有關(guān)得函數(shù)名以“f_MCU_作為前綴。中斷函數(shù)以“f_Int_作為前綴。變量名命名標(biāo)準(zhǔn)原那么上,變量名得命名遵從匈牙利記法。即:前綴 + 類型 + 變量名注:匈牙利命名法關(guān)鍵是:標(biāo)識(shí)符得名字以一個(gè)或者多個(gè)小寫字母開頭作為前綴;前綴之后得是首字母大寫得一個(gè)單詞或多個(gè)單詞組合,該單詞要指明變量得用途。變量名使用大小寫混排得方式,為了方便讀出變量名所代表得含義,每個(gè)英文單詞得頭一個(gè)字符使用大寫字母,單詞剩余局部使用小寫字母。如:unsigned char nSe
19、cCnt;/秒級(jí)計(jì)數(shù)器變量名最長(zhǎng)不得超過20個(gè)字符。類型縮寫typeBool(bit) bunsigned char, BYTE nWORD, DWORD, int, _int16,_int32,_int64 n, lpointer ptype tclass c注:鑒于單片機(jī)編程得特殊性,很少會(huì)用到char類型,而unsigned char和BYTE類型通常用做計(jì)數(shù)器使用,因此使用n作為前綴名,表示整型,而不是uc,與通常得命名規(guī)那么有些不同。同時(shí)在8位單片機(jī)中也較少會(huì)用到16位數(shù)字,并且其用法根本與BYTE型沒有區(qū)別,因此16位及以上類型使用l小寫得L或者n來定義,表示長(zhǎng)整型。在ANSI C
20、語言得定義中,沒有位(Bit)變量得定義,有些編譯器支持位變量,有一些那么不支持,為保持統(tǒng)一,使用type來定義位變量。建議使用結(jié)構(gòu)來定義有關(guān)得變量,這樣可以使程序更具有可讀性,而且有時(shí)還可以減少RAM區(qū)得使用,如設(shè)定風(fēng)速和運(yùn)行風(fēng)速最多有8種風(fēng)速選擇,使用結(jié)構(gòu)來定義這兩個(gè)變量1個(gè)字節(jié)就夠了,而如果不使用,那么需要2個(gè)字節(jié),詳細(xì)定義見第5節(jié);附:有關(guān)匈牙利命名法得一點(diǎn)有意思得說明是它得名字得由來。這種命名技術(shù)是由一位能干得 Microsoft 程序員查爾斯西蒙尼(Charles Simonyi) 提出得,他出生在匈牙利。在 Microsoft 公司中和他一起工作得人被教會(huì)使用這種約定。這對(duì)他們來
21、說一切都很正常。但對(duì)那些 Simonyi 領(lǐng)導(dǎo)得工程組之外得人來說卻感到很奇特,他們認(rèn)為這是死板得表達(dá)方式,甚至說代有這樣奇怪得外觀是因?yàn)樗怯眯傺览膶懙谩拇诉@種命名方式就被叫做匈牙利命名法。標(biāo)識(shí)符得命名要清晰、明了,有明確含義,同時(shí)使用完整得單詞或大家根本可以理解得縮寫,防止使人產(chǎn)生誤解。說明:較短得單詞可通過去掉“元音形成縮寫;較長(zhǎng)得單詞可取單詞得頭幾個(gè)字母形成縮寫;一些單詞有大家公認(rèn)得縮寫。例如:如下單詞得縮寫能夠被大家根本認(rèn)可。temp 可縮寫為 tmp ;flag 可縮寫為 flg ;statistic 可縮寫為 stat ;increment 可縮寫為 inc ;message
22、 可縮寫為 msg ;除非必要,不要用數(shù)字或較奇怪得字符來定義標(biāo)識(shí)符。例如:如下命名,使人產(chǎn)生疑惑。#define _EXAMPLE_0_TEST_#define _EXAMPLE_1_TEST_void set_sls00( BYTE sls );應(yīng)改為有意義得單詞命名#define _EXAMPLE_UNIT_TEST_#define _EXAMPLE_ASSERT_TEST_void set_udt_msg_sls( BYTE sls );宏定義命名標(biāo)準(zhǔn)宏是用來表示一些固定或可能會(huì)改變得參數(shù)得名稱。在編譯得時(shí)候編譯程序會(huì)將其替代為宏所代表得內(nèi)容,其本身并不會(huì)出現(xiàn)在最終得程序中。因此宏不占
23、用內(nèi)存空間。但在修改參數(shù)得時(shí)候宏定義那么方便了很多,只要修改宏所代表得值即可。同時(shí)由于宏名稱可以使用任意長(zhǎng)字符,相對(duì)于沒有意義得數(shù)字而言,使用宏可以很大程度上提高程序可讀性。因此建議:在用到有意義得數(shù)值參數(shù)時(shí)應(yīng)盡量使用宏定義,而不是直接在程序中使用數(shù)值。如在程序中需使用蜂鳴器鳴叫時(shí)間,當(dāng)前定義為200ms,可以使用宏定義此參數(shù)如下:#define BEEP_TIME 200而在使用此參數(shù)得地方直接使用BEEP_TIME:if (i BEEP_TIME) then 。當(dāng)需要更改此時(shí)間為300ms得時(shí)候,只需做如下修改#define BEEP_TIME 300而不用修改程序內(nèi)部,可見使用宏定義在增
24、強(qiáng)了可讀性得同時(shí),還提高了程序得穩(wěn)定性,防止了修改程序內(nèi)部可能造成得錯(cuò)誤。注意:函數(shù)和宏函數(shù)得區(qū)別就在于,宏函數(shù)占用了大量得空間,而函數(shù)占用了時(shí)間。大家要知道得是,函數(shù)調(diào)用是要使用系統(tǒng)得棧來保存數(shù)據(jù)得,如果編譯器里有棧檢查選項(xiàng),一般在函數(shù)得頭會(huì)嵌入一些匯編語句對(duì)當(dāng)前棧進(jìn)行檢查;同時(shí),CPU也要在函數(shù)調(diào)用時(shí)保存和恢復(fù)當(dāng)前得現(xiàn)場(chǎng),進(jìn)行壓棧和彈棧操作,所以,函數(shù)調(diào)用需要一些CPU時(shí)間。而宏函數(shù)不存在這個(gè)問題。宏函數(shù)僅僅作為預(yù)先寫好得代碼嵌入到當(dāng)前程序,不會(huì)產(chǎn)生函數(shù)調(diào)用,所以僅僅是占用了空間,在頻繁調(diào)用同一個(gè)宏函數(shù)得時(shí)候,該現(xiàn)象尤其突出。2宏定義不是語句,所以不能在行尾加分號(hào)。否那么,宏展開時(shí),會(huì)將分
25、號(hào)作為字符串得1個(gè)字符,用于替換宏名。3在宏展開時(shí),預(yù)處理程序僅以按宏定義簡(jiǎn)單替換宏名,而不作任何檢查。如果有錯(cuò)誤,只能由編譯程序在編譯宏展開后得源程序時(shí)發(fā)現(xiàn)。4宏定義命令#define出現(xiàn)在函數(shù)得外部,宏名得有效范圍是:從定義命令之后, 到本文件結(jié)束。通常,宏定義命令放在文件開頭處。 5在進(jìn)行宏定義時(shí),可以引用已定義得宏名 。6對(duì)雙引號(hào)括起來得字符串內(nèi)得字符,即使與宏名同名,也不進(jìn)行宏展開。 需要使用宏定義得內(nèi)容:芯片輸入輸出口:如遙控器輸入口定義為IN_RMC內(nèi)部需要使用得常量:如蜂鳴器鳴叫短時(shí)間 BEEP_SHORT_TIME宏名稱規(guī)定如下:宏名稱全部使用大寫字母芯片輸入口宏以字符IN_
26、為前綴,后面為輸入口功能縮寫。如遙控器輸入口定義為IN_RMC,如果同樣功能有幾個(gè)輸入口,依次在功能縮寫后面加序號(hào)1,2,為后綴。如按鍵輸入口為IN_KEY_1,IN_KEY_2,。芯片輸出口宏以字符OUT_ 為前綴,后面為輸出口功能縮寫。如果同樣功能有幾個(gè)輸入口,依次在功能縮寫后面加序號(hào)1,2,為后綴。如顯示輸出口為OUT_DISPLAY_COM1,OUT_DISPLAY_COM1,。宏功能名稱使用英文單詞或單詞縮寫,每個(gè)單詞與單詞間使用下劃線“_連接。注:宏得使用根據(jù)個(gè)人而定,建議但不強(qiáng)制如果一個(gè)常量出現(xiàn)兩次以上包括兩次,使用宏變量來定義此常量注釋標(biāo)準(zhǔn)總體原那么采用中文注釋;如果某個(gè)模塊或
27、某個(gè)復(fù)合語句在5分鐘內(nèi)仍不能被其他編程人員看明白,那么說明此處得注釋是不成功得;注釋內(nèi)容應(yīng)簡(jiǎn)煉、清楚、明了;保持注釋與代碼完全一致,錯(cuò)誤得注釋還不如沒有注釋;每個(gè)源程序文件,都有文件注釋,注釋內(nèi)容見后續(xù)內(nèi)容;每個(gè)函數(shù)模塊,都有函數(shù)頭注釋,注釋內(nèi)容見后續(xù)內(nèi)容;常量定義DEFINE有相應(yīng)說明;為兼容性考慮,原那么上全部使用/*/來包含注釋,不許使用/來注釋。因?yàn)?為C+后定義得注釋符,不是所有得編譯器都會(huì)支持。/*后和*/前最好留一個(gè)空格,因?yàn)橛行┚幾g器對(duì)中文得支持不好,如果沒有空格會(huì)誤將注釋做為代碼進(jìn)行編譯舉例:unsigned char nSecCnt;/* 秒級(jí)計(jì)數(shù)器 */好得函數(shù)和變量命名
28、是最好得注釋。文件注釋內(nèi)容文件注釋內(nèi)容放在文件得最上端;文件注釋需包含以下內(nèi)容:文件名稱、版權(quán)、包含文件、作者名稱、修改時(shí)間、文件功能簡(jiǎn)介、使用芯片等,復(fù)雜得算法需要加上流程說明;舉例:/*=* 文 件 名:ACM43LMain.c* 版 權(quán):杭州達(dá)峰電子* 功能描述:AUCMA43變頻柜機(jī)主程序* 芯片名稱:Toshiba TMP846* 包含文件:ACM43LMain.h* 編 譯 器:* 修改日期修改人修改說明* 2003-06-08全永兵 完成根本功能=*/文件結(jié)尾注釋一律為:/* (c) 浙江達(dá)峰科技 * END OF FILE */模塊注釋內(nèi)容編寫通用驅(qū)動(dòng)模塊得時(shí)候在文件注釋后需要
29、加上模塊調(diào)用方法,使得其他人可對(duì)如何使用該模塊一目了然;調(diào)用方法需包含以下內(nèi)容:文件名稱、版權(quán)、包含文件、作者名稱、修改時(shí)間、文件功能簡(jiǎn)介、使用芯片等,復(fù)雜得算法需要加上流程說明;舉例:/* 調(diào)用方法 *1、在io_define.h文件中定義OUT_BUZZ端口和*MCU_CHANGE_BUZZER_STATE(1):蜂鳴器鳴叫與 *“MCU_CHANGE_BUZZER_STATE(0):蜂鳴器停止函數(shù); *2、主程序初始化時(shí)調(diào)用f_InitBeepPara()函數(shù)初始化蜂鳴器參數(shù)(可省略); *3、在需要使用蜂鳴器得主程序中調(diào)用f_OutBuz()函數(shù); *4、在10ms時(shí)間中斷中調(diào)用f_I
30、ncBuzTm()函數(shù); *5、在需要蜂鳴器鳴叫時(shí)調(diào)用f_Beep()函數(shù),輸入變量為鳴叫類型; * 1為1短聲,2為1長(zhǎng)聲,3為兩短聲,4為兩長(zhǎng)聲,5為三短聲,6為三長(zhǎng)聲 *7為四短聲,8為四長(zhǎng)聲,其它為不鳴叫 *6、如果修改蜂鳴器鳴叫時(shí)間請(qǐng)修改BuzBeep.h中得相應(yīng)宏對(duì)應(yīng)得值;*/函數(shù)注釋除非極其簡(jiǎn)單,否那么對(duì)函數(shù)應(yīng)有注釋說明;函數(shù)注釋放在函數(shù)體得前面;函數(shù)注釋應(yīng)包含以下內(nèi)容:函數(shù)名稱、功能、說明 輸入、返回、函數(shù)描述、流程處理、全局變量、調(diào)用樣例等,復(fù)雜得函數(shù)需要加上變量用途說明;如果沒有輸入變量和輸出變量那么省略對(duì)輸入輸出得注釋;舉例:/* =* 函 數(shù) 名: f_StartUpW
31、ater()* 功能描述: 啟動(dòng)上水, 根據(jù)當(dāng)前傳感器狀態(tài)判斷是否可以啟動(dòng)上水 * 調(diào)用方法: nFault = f_StartUpWater(2, 1);* 輸入?yún)?shù): 目標(biāo)水位, 上水原因 * 輸出參數(shù): 可以上水返回0,因故不能上水返回1, 當(dāng)前水位已到達(dá)目標(biāo)水位返回2 * 全局變量: tUpWater, tFault= */unsigned char f_StartUpWater(unsigned char i_TargetWaterPos, unsigned char i_Reason)/在這里添加程序代碼程序中得注釋內(nèi)容一般情況下,源程序有效注釋量必須在20以上說明:注釋得原那么是
32、有助于對(duì)程序得閱讀理解,在該加得地方都加了,注釋不宜太多也不能太少,注釋語言必須準(zhǔn)確、易懂、簡(jiǎn)潔。對(duì)于根本數(shù)據(jù)類型,聲明在一行內(nèi)完成;unsigned char nSecCnt;/* 秒級(jí)計(jì)數(shù)器 */unsigned char n1msCnt;/* 毫秒級(jí)計(jì)數(shù)器 */一目了然得語句不加注釋;算法語句需要添加注釋來解釋算法得實(shí)現(xiàn)方法;處理過程得每個(gè)階段都有相關(guān)注釋說明;空行和空白字符也是一種特殊注釋,具體見下一節(jié)?編程風(fēng)格?。邊寫代碼邊注釋,修改代碼同時(shí)修改相應(yīng)得注釋,以保證注釋與代碼得一致性。不再有用得注釋要?jiǎng)h除注釋得內(nèi)容要清楚、明了,含義準(zhǔn)確,防止注釋二義性。說明:錯(cuò)誤得注釋不但無益反而有害
33、注釋應(yīng)與其描述得代碼相近,對(duì)代碼得注釋應(yīng)放在其上方或右方對(duì)單條語句得注釋相鄰位置,不可放在下面,如放于上方那么需與其上面得代碼用空行隔開例如:如下例子不符合標(biāo)準(zhǔn)。repssn_ind = ssn_dataindex.repssn_index;repssn_ni = ssn_dataindex.ni;/* get replicate sub system index and net indicator */應(yīng)如下書寫/* get replicate sub system index and net indicator */repssn_ind = ssn_dataindex.repssn_ind
34、ex;repssn_ni = ssn_dataindex.ni;對(duì)于所有有物理含義得變量、常量,如果其命名不是充分自注釋得,在聲明時(shí)都必須加以注釋,說明其物理含義。變量、常量、宏得注釋應(yīng)放在其上方相鄰位置或右方。例如:/* active statistic task number */#define MAX_ACT_TASK_NUMBER 1000#define MAX_ACT_TASK_NUMBER 1000 /* active statistic task number */數(shù)據(jù)結(jié)構(gòu)聲明(包括數(shù)組、結(jié)構(gòu)、類、枚舉等),如果其命名不是充分自注釋得,必須加以注釋。對(duì)數(shù)據(jù)結(jié)構(gòu)得注釋應(yīng)放在其上方相
35、鄰位置,不可放在下面;對(duì)結(jié)構(gòu)中得每個(gè)域得注釋放在此域得右方。例如:可按如下形式說明枚舉/數(shù)據(jù)/聯(lián)合結(jié)構(gòu)。/* 顯示結(jié)構(gòu)體 */typedef structunsigned char bFullScreen : 1;/* 全屏顯示 */unsigned char bEnergySaving : 1;/* 節(jié)能 */unsigned char bSelfTest : 1;/* 自檢 */display_def;全局變量要有較詳細(xì)得注釋,最好包括對(duì)其功能、取值范圍以及存取時(shí)考前須知等得說明。例如:option_def tOption;/* 可選功能 */hour_def tCurTime;/* 當(dāng)前
36、時(shí)間 */注釋與所描述內(nèi)容進(jìn)行同樣得縮排。說明:可使程序排版整齊,并方便注釋得閱讀與理解。例如:如下例子,排版不整齊,閱讀稍感不方便。void example_fun( void )/* code one comments */CodeBlock One/* code two comments */CodeBlock Two應(yīng)改為如下布局。void example_fun( void )/* code one comments */CodeBlock One/* code two comments */CodeBlock Two或void example_fun( void )CodeBloc
37、k One/* code one comments */CodeBlock Two/* code two comments */防止在一行代碼或表達(dá)式得中間插入注釋。說明:除非必要,不應(yīng)在代碼或表達(dá)中間插入注釋,否那么容易使代碼可理解性變差。通過對(duì)函數(shù)或過程、變量、結(jié)構(gòu)等正確得命名以及合理地組織代碼得結(jié)構(gòu),使代碼成為自注釋得。說明:清晰準(zhǔn)確得函數(shù)、變量等得命名,可增加代碼可讀性,并減少不必要得注釋。在代碼得功能、意圖層次上進(jìn)行注釋,提供有用、額外得信息。說明:注釋得目得是解釋代碼得目得、功能和采用得方法,提供代碼以外得信息,幫助讀者理解代碼,防止沒必要得重復(fù)注釋信息。例如:如下注釋意義不大。/
38、* if receive_flag is TRUE */if (receive_flag)而如下得注釋那么給出了額外有用得信息。/* if mtp receive a message from links */if (receive_flag)在程序塊得結(jié)束行右方加注釋標(biāo)記,以說明某程序塊得結(jié)束。說明:當(dāng)代碼段較長(zhǎng),特別是多重嵌套時(shí),這樣做可以使代碼更清晰,更便于閱讀。例如:參見如下例子。if (.)/ program codewhile (index MAX_INDEX)/ program code /* end of while (index 80 字符要分成多行書寫,長(zhǎng)表達(dá)式要在低優(yōu)先級(jí)
39、操作符處劃分新行,操作符放在新行之首,劃分出得新行要進(jìn)行適當(dāng)?shù)每s進(jìn),使排版整齊,語句可讀。例如:perm_count_msg.head.len = NO7_TO_STAT_PERM_COUNT_LEN+ STAT_SIZE_PER_FRAM * sizeof( _UL );act_task_tableframe_id * STAT_TASK_CHECK_NUMBER + index.occupied= stat_poiindex.occupied;不允許把多個(gè)短語句寫在一行中,即一行只寫一條語句。例如:如下例子不符合標(biāo)準(zhǔn)。rect.length = 0; rect.width = 0;應(yīng)如下書
40、寫rect.length = 0;rect.width = 0;在結(jié)構(gòu)定義時(shí),一律使用typedef關(guān)鍵字;數(shù)值常數(shù):在使用常數(shù)時(shí),盡量使用宏進(jìn)行定義;預(yù)處理語句、全局?jǐn)?shù)據(jù)、函數(shù)原型、標(biāo)題、附加說明、函數(shù)說明等均頂格書寫;對(duì)齊:原那么上關(guān)系密切得行應(yīng)對(duì)齊,對(duì)齊包括類型、修飾、名稱、參數(shù)等各局部對(duì)齊;空行:程序文件結(jié)構(gòu)各局部之間空兩行,假設(shè)不必要也可只空一行,各函數(shù)實(shí)現(xiàn)之間一般空兩行;當(dāng)一行被分為幾行時(shí),通過將串聯(lián)運(yùn)算符放在每一行得末尾或第二行得開頭,清楚地表示沒有后面得行是不完整得;舉例if (tElecHeat.nElecHeatReason = DEFREEZE& tUpWater.nUp
41、WaterReason = ELEC_HEAT)nFault = 1;函數(shù)或過程得開始、結(jié)構(gòu)得定義及循環(huán)、判斷等語句中得代碼都要采用縮進(jìn)風(fēng)格,case語句下得情況處理語句也要遵從語句縮進(jìn)要求。函數(shù)得參數(shù)和返回值沒有得話使用void;一些常數(shù)和表格之類得應(yīng)該放到code去中以節(jié)省RAM使用CONST關(guān)鍵字或編譯器指定得方法;程序編完編譯看有多少code多少data,注意留有足夠得堆??臻g;形參:在定義函數(shù)時(shí),在函數(shù)名后面括號(hào)中直接進(jìn)行形式參數(shù)說明,不再另行說明;形參使用“i_作為前綴禁止出現(xiàn)兩條等價(jià)得支路;禁止GOTO語句;源程序中關(guān)系較為緊密得代碼應(yīng)盡可能相鄰;說明:便于程序閱讀和查找。例如:
42、以下代碼布局不太合理。rect.length = 10;char_poi = str;rect.width = 5;假設(shè)按如下形式書寫,可能更清晰一些。rect.length = 10;rect.width = 5; / 矩形得長(zhǎng)與寬關(guān)系較密切,放在一起。char_poi = str;不要使用難懂得技巧性很高得語句,除非很有必要時(shí)。說明:高技巧語句不等于高效率得程序,實(shí)際上程序得效率關(guān)鍵在于算法。例如:如下表達(dá)式,考慮不周就可能出問題,也較難理解。* stat_poi + += 1;* + stat_poi += 1;應(yīng)分別改為如下。*stat_poi += 1;stat_poi+; / 此二
43、語句功能相當(dāng)于“ * stat_poi + += 1; + stat_poi;*stat_poi += 1; / 此二語句功能相當(dāng)于“ * + stat_poi += 1; 防止從循環(huán)引出多個(gè)出口;即使對(duì)于可能僅出現(xiàn)在幾個(gè)代碼行中得生存期很短得變量,仍然使用有意義得名稱。僅對(duì)于短循環(huán)索引使用單字母變量名,如 i 或 j;每行代碼得最長(zhǎng)為60列,如果超過60列,那么折行繼續(xù);折行后縮進(jìn)一個(gè)TAB距離因編譯器、工具兼容問題可以不折行;例:if (tUpWater.nCurWaterPos 0& tUpWater.nCurWaterPos = nTemp + 10& tElecHeat.bNeedE
44、lecHeat = 0)循環(huán)、分支代碼,判斷條件與執(zhí)行代碼不得在同一行上。例:正確:if (n = -2)n = 1;elsen = 2;不得寫做:if (n = -2) n = 1;else n = 2;指針得定義,* 號(hào)緊接在變量名之前;例:unsigned char *nTemp;以下為與有關(guān)得內(nèi)容:語句塊得“配對(duì)對(duì)齊,并與其前一行對(duì)齊;、應(yīng)獨(dú)占一行,在該行內(nèi)可有注釋,但不許有可執(zhí)行語句。例:正確:for (i = 0; i 8; i+) /* */nTmpDspBufi=0XFF;不得寫做:for (i = 0; i 0)m = 1;n+;或if (i 0) m = 1; else m
45、 = 2; 不得寫做:if (i 0) m = 1;n+;或:if (i 0)m = 1;n+;在循環(huán)、分支之后假設(shè)只有一行代碼,可省略、。假設(shè)省略后可能引起歧義,那么必須加上、。例:正確:if (n = -2)n = 1;elsen = 2;或者:if (n = -2) n = 1; else if (n != nTemp) n = 2; else n = 3; 以下為與空格有關(guān)得內(nèi)容:在所有兩目、三目運(yùn)算符得兩邊都必須有空格,在單目運(yùn)算符兩端不必空格。但在-、 .、等運(yùn)算符前后,及&取地址、*取值等運(yùn)算符之后不得有空格。例:正確:int n = 0, nTemp;for (int i =
46、nMinLine; i = nMaxLine; i+)不得寫做:int n=0, nTemp;for ( int i=nMinLine; i 0)注意如果使用unsigned char i 來定義變量,在判斷過程中不要使用如下代碼:if (i = 0)因?yàn)閕為無符號(hào)字符,因此這個(gè)表達(dá)式是永遠(yuǎn)為真得,而且在編譯時(shí)不會(huì)出錯(cuò)。以下為類型轉(zhuǎn)換得內(nèi)容編程時(shí),要注意數(shù)據(jù)類型得強(qiáng)制轉(zhuǎn)換。說明:當(dāng)進(jìn)行數(shù)據(jù)類型強(qiáng)制轉(zhuǎn)換時(shí),其數(shù)據(jù)得意義、轉(zhuǎn)換后得取值等都有可能發(fā)生變化,而這些細(xì)節(jié)假設(shè)考慮不周,就很有可能留下隱患。對(duì)編譯系統(tǒng)默認(rèn)得數(shù)據(jù)類型轉(zhuǎn)換,也要有充分得認(rèn)識(shí)。例如:如下賦值,多數(shù)編譯器不產(chǎn)生告警,但值得含義還是稍
47、有變化。char chr;unsigned short int exam;chr = -1;exam = chr; / 編譯器不產(chǎn)生告警,此時(shí)exam 為0 xFFFF。盡量減少?zèng)]有必要得數(shù)據(jù)類型默認(rèn)轉(zhuǎn)換與強(qiáng)制轉(zhuǎn)換。合理地設(shè)計(jì)數(shù)據(jù)并使用自定義數(shù)據(jù)類型,防止數(shù)據(jù)間進(jìn)行不必要得類型轉(zhuǎn)換。對(duì)自定義數(shù)據(jù)類型進(jìn)行恰當(dāng)命名,使它成為自描述性得,以提高代碼可讀性。注意其命名方式在同一產(chǎn)品中得統(tǒng)一。說明:使用自定義類型,可以彌補(bǔ)編程語言提供類型少、信息量缺乏得缺點(diǎn),并能使程序清晰、簡(jiǎn)潔。例如:可參考如下方式聲明自定義數(shù)據(jù)類型。下面得聲明可使數(shù)據(jù)類型得使用簡(jiǎn)潔、明了。typedef unsigned char
48、BYTE;typedef unsigned short WORD;typedef unsigned int DWORD;下面得聲明可使數(shù)據(jù)類型具有更豐富得含義。typedef float DISTANCE;typedef float SCORE;質(zhì)量保證在軟件設(shè)計(jì)過程中構(gòu)筑軟件質(zhì)量。模塊編寫盡量少得使用全局變量注意函數(shù)嵌套不要太多,一般不超過7層防止堆棧溢出,在編譯后要觀察全局變量個(gè)數(shù)改良模塊中函數(shù)得結(jié)構(gòu),降低函數(shù)間得耦合度,并提高函數(shù)得獨(dú)立性以及代碼可讀性、效率和可維護(hù)性。優(yōu)化函數(shù)結(jié)構(gòu)時(shí),要遵守以下原那么:1不能影響模塊功能得實(shí)現(xiàn)。2仔細(xì)考查模塊或函數(shù)出錯(cuò)處理及模塊得性能要求并進(jìn)行完善。3通
49、過分解或合并函數(shù)來改良軟件結(jié)構(gòu)。4考查函數(shù)得規(guī)模,過大得要進(jìn)行分解。5降低函數(shù)間接口得復(fù)雜度。6不同層次得函數(shù)調(diào)用要有較合理得扇入、扇出。7函數(shù)功能應(yīng)可預(yù)測(cè)。8提高函數(shù)內(nèi)聚。單一功能得函數(shù)內(nèi)聚最高說明:對(duì)初步劃分后得函數(shù)結(jié)構(gòu)應(yīng)進(jìn)行改良、優(yōu)化,使之更為合理。代碼質(zhì)量保證優(yōu)先原那么1正確性,指程序要實(shí)現(xiàn)設(shè)計(jì)要求得功能。2穩(wěn)定性、平安性,指程序穩(wěn)定、可靠、平安。3可測(cè)試性,指程序要具有良好得可測(cè)試性。4標(biāo)準(zhǔn)/可讀性,指程序書寫風(fēng)格、命名規(guī)那么等要符合標(biāo)準(zhǔn)。5全局效率,指軟件系統(tǒng)得整體效率。6局部效率,指某個(gè)模塊/子模塊/函數(shù)得本身效率。7個(gè)人表達(dá)方式/個(gè)人方便性,指?jìng)€(gè)人編程習(xí)慣。精心構(gòu)造算法,并對(duì)其
50、性能、效率進(jìn)行測(cè)試。對(duì)較關(guān)鍵得算法最好使用其它算法來確認(rèn)。時(shí)刻注意表達(dá)式是否會(huì)上溢、下溢。例如:如下程序?qū)⒃斐勺兞肯乱?。unsigned char size ;while (size- = 0) / 將出現(xiàn)下溢. / program code當(dāng)size 等于0 時(shí),再減1 不會(huì)小于0,而是0 xFF,故程序是一個(gè)死循環(huán)。應(yīng)如下修改。char size; / 從unsigned char 改為charwhile (size- = 0). / program code使用變量時(shí)要注意其邊界值得情況。例如:如C 語言中字符型變量,有效值范圍為-128 到127。故以下表達(dá)式得計(jì)算存在一定風(fēng)險(xiǎn)。cha
51、r chr = 127;int sum = 200;chr += 1; / 127 為chr 得邊界值,再加1 將使chr 上溢到-128,而不是128。sum += chr; / 故sum 得結(jié)果不是328,而是72。假設(shè)chr 與sum 為同一種類型,或表達(dá)式按如下方式書寫,可能會(huì)好些。sum = sum + chr + 1;留心程序機(jī)器碼大小如指令空間大小、數(shù)據(jù)空間大小、堆??臻g大小等是否超出系統(tǒng)有關(guān)限制。程序效率編程時(shí)要經(jīng)常注意代碼得效率。說明:代碼效率分為全局效率、局部效率、時(shí)間效率及空間效率。全局效率是站在整個(gè)系統(tǒng)得角度上得系統(tǒng)效率;局部效率是站在模塊或函數(shù)角度上得效率;時(shí)間效率是
52、程序處理輸入任務(wù)所需得時(shí)間長(zhǎng)短;空間效率是程序所需內(nèi)存空間,如機(jī)器代碼空間大小、數(shù)據(jù)空間大小、??臻g大小等。在保證軟件系統(tǒng)得正確性、穩(wěn)定性、可讀性及可測(cè)性得前提下,提高代碼效率。說明:不能一味追求代碼效率,而對(duì)軟件得正確性、穩(wěn)定性、可讀性及可測(cè)性造成影響。局部效率應(yīng)為全局效率效勞,不能因?yàn)樘岣呔植啃识鴮?duì)全局效率造成影響。通過對(duì)系統(tǒng)數(shù)據(jù)結(jié)構(gòu)得劃分與組織得改良,以及對(duì)程序算法得優(yōu)化來提高空間效率。說明:這種方式是解決軟件空間效率得根本方法。例如:如下記錄學(xué)生學(xué)習(xí)成績(jī)得結(jié)構(gòu)不合理。typedef unsigned char BYTE;typedef unsigned short WORD;type
53、def struct STUDENT_SCORE_STRUBYTE name8;BYTE age;BYTE sex;BYTE class;BYTE subject;float score; STUDENT_SCORE;因?yàn)槊课粚W(xué)生都有多科學(xué)習(xí)成績(jī),故如上結(jié)構(gòu)將占用較大空間。應(yīng)如下改良分為兩個(gè)結(jié)構(gòu),總得存貯空間將變小,操作也變得更方便。typedef struct STUDENT_STRUBYTE name8;BYTE age;BYTE sex;BYTE class; STUDENT;typedef struct STUDENT_SCORE_STRUWORD student_index;BYTE
54、 subject;float score; STUDENT_SCORE;循環(huán)體內(nèi)工作量最小化。說明:應(yīng)仔細(xì)考慮循環(huán)體內(nèi)得語句是否可以放在循環(huán)體之外,使循環(huán)體內(nèi)工作量最小,從而提高程序得時(shí)間效率。例如:如下代碼效率不高。for (ind = 0; ind MAX_ADD_NUMBER; ind+)sum += ind;back_sum = sum; /* backup sum */語句“back_sum = sum;完全可以放在for 語句之后,如下。for (ind = 0; ind MAX_ADD_NUMBER; ind+)sum += ind;back_sum = sum; /* back
55、up sum */仔細(xì)分析有關(guān)算法,并進(jìn)行優(yōu)化。仔細(xì)考查、分析系統(tǒng)及模塊處理輸入如事務(wù)、消息等得方式,并加以改良。對(duì)模塊中函數(shù)得劃分及組織方式進(jìn)行分析、優(yōu)化,改良模塊中函數(shù)得組織結(jié)構(gòu),提高程序效率。說明:軟件系統(tǒng)得效率主要與算法、處理任務(wù)方式、系統(tǒng)功能及函數(shù)結(jié)構(gòu)有很大關(guān)系,僅在代碼上下功夫一般不能解決根本問題。編程時(shí),要隨時(shí)留心代碼效率;優(yōu)化代碼時(shí),要考慮周全。不應(yīng)花過多得時(shí)間拼命地提高調(diào)用不很頻繁得函數(shù)代碼效率。說明:對(duì)代碼優(yōu)化可提高效率,但假設(shè)考慮不周很有可能引起嚴(yán)重后果。要仔細(xì)地構(gòu)造或直接用匯編編寫調(diào)用頻繁或性能要求極高得函數(shù)。說明:只有對(duì)編譯系統(tǒng)產(chǎn)生機(jī)器碼得方式以及硬件系統(tǒng)較為熟悉時(shí),
56、才可使用匯編嵌入方式。嵌入?yún)R編可提高時(shí)間及空間效率,但也存在一定風(fēng)險(xiǎn)。在保證程序質(zhì)量得前提下,通過壓縮代碼量、去掉不必要代碼以及減少不必要得局部和全局變量,來提高空間效率。說明:這種方式對(duì)提高空間效率可起到一定作用,但往往不能解決根本問題。在多重循環(huán)中,應(yīng)將最忙得循環(huán)放在最內(nèi)層。說明:減少CPU 切入循環(huán)層得次數(shù)。例如:如下代碼效率不高。for (row = 0; row 100; row+)for (col = 0; col 5; col+)sum += arowcol;可以改為如下方式,以提高效率。for (col = 0; col 5; col+)for (row = 0; row 10
57、0; row+)sum += arowcol;盡量減少循環(huán)嵌套層次。防止循環(huán)體內(nèi)含判斷語句,應(yīng)將循環(huán)語句置于判斷語句得代碼塊之中。說明:目得是減少判斷次數(shù)。循環(huán)體中得判斷語句是否可以移到循環(huán)體外,要視程序得具體情況而言,一般情況,與循環(huán)變量無關(guān)得判斷語句可以移到循環(huán)體外,而有關(guān)得那么不可以。例如:如下代碼效率稍低。for (ind = 0; ind MAX_RECT_NUMBER; ind+)if (data_type = RECT_AREA)area_sum += rect_areaind;elserect_length_sum += rectind.length;rect_width_su
58、m += rectind.width;因?yàn)榕袛嗾Z句與循環(huán)變量無關(guān),故可如下改良,以減少判斷次數(shù)。if (data_type = RECT_AREA)for (ind = 0; ind MAX_RECT_NUMBER; ind+)area_sum += rect_areaind;elsefor (ind = 0; ind MAX_RECT_NUMBER; ind+)rect_length_sum += rectind.length;rect_width_sum += rectind.width;盡量用乘法或其它方法代替除法,特別是浮點(diǎn)運(yùn)算中得除法。說明:浮點(diǎn)運(yùn)算除法要占用較多CPU 資源。例如:
59、如下表達(dá)式運(yùn)算可能要占較多CPU 資源。#define PAI 3.1416radius = circle_length / (2 * PAI);應(yīng)如下把浮點(diǎn)除法改為浮點(diǎn)乘法。#define PAI_RECIPROCAL (1 / 3.1416 ) / 編譯器編譯時(shí),將生成具體浮點(diǎn)數(shù)radius = circle_length * PAI_RECIPROCAL / 2;不要一味追求緊湊得代碼。說明:因?yàn)榫o湊得代碼并不代表高效得機(jī)器碼。模塊(文件)劃分標(biāo)準(zhǔn)雖然只使用一個(gè)文件也可以完成整個(gè)軟件,但從可移植性和可讀性考慮將一個(gè)軟件劃分為多個(gè)文件來實(shí)現(xiàn)是非常必要得。而每個(gè)文件又是由一個(gè)個(gè)小得模塊函數(shù)組
60、成得,每個(gè)函數(shù)實(shí)現(xiàn)不同得功能,各個(gè)函數(shù)之間通過全局變量連接到一起,從而組成整個(gè)系統(tǒng)。各文件模塊得劃分依據(jù)是功能獨(dú)立、擴(kuò)展方便,即每個(gè)模塊得功能相對(duì)來說都比擬獨(dú)立,在修改某一個(gè)模塊得時(shí)候盡量不影響到其它模塊得正常運(yùn)行,在擴(kuò)展功能或修改硬件時(shí)需要改動(dòng)得模塊盡量少,同時(shí)還要考慮到各模塊得復(fù)雜度,將一個(gè)大得模塊分為幾個(gè)小得模塊可以更方便編程及調(diào)試。如果某些模塊是相互關(guān)聯(lián)得,最好將這些模塊放在一個(gè)文件內(nèi)封裝起來。整個(gè)軟件系統(tǒng)包括以下模塊(文件):頭文件:被其他文件包含得文件,包括結(jié)構(gòu)體定義和常量定義文件主文件:main.c,負(fù)責(zé)所有文件間得調(diào)度 全局變量文件:所有得全局變量及其初始化函數(shù),盡量少得使用全
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- GB/T 45030-2024壽山石田黃鑒定
- 二零二五年酒店客房服務(wù)滿意度提升單位合同范本3篇
- 二零二五年度網(wǎng)絡(luò)安全防護(hù)服務(wù) XXX合同協(xié)議補(bǔ)充協(xié)議2篇
- 二零二五年高管薪酬體系調(diào)整與執(zhí)行合同3篇
- 2024版建設(shè)工程合同包括哪幾種形式
- 二零二五年研發(fā)合作協(xié)議及其技術(shù)轉(zhuǎn)讓條款2篇
- 2024汽修場(chǎng)地租賃及維修設(shè)備采購(gòu)合同范本2篇
- 二零二五年海南地區(qū)教育機(jī)構(gòu)勞動(dòng)合同示范文本3篇
- 2024年酒店式公寓共同開發(fā)協(xié)議
- 二零二五年度公益組織財(cái)務(wù)審計(jì)代理協(xié)議3篇
- GB/T 16895.3-2024低壓電氣裝置第5-54部分:電氣設(shè)備的選擇和安裝接地配置和保護(hù)導(dǎo)體
- 2025湖北襄陽市12345政府熱線話務(wù)員招聘5人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年河北省職業(yè)院校技能大賽智能節(jié)水系統(tǒng)設(shè)計(jì)與安裝(高職組)考試題庫(kù)(含答案)
- 2024年下半年鄂州市城市發(fā)展投資控股集團(tuán)限公司社會(huì)招聘【27人】易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- GB/T 29498-2024木門窗通用技術(shù)要求
- 《職業(yè)院校與本科高校對(duì)口貫通分段培養(yǎng)協(xié)議書》
- GJB9001C質(zhì)量管理體系要求-培訓(xùn)專題培訓(xùn)課件
- 人教版(2024)英語七年級(jí)上冊(cè)單詞表
- 中醫(yī)養(yǎng)生產(chǎn)業(yè)現(xiàn)狀及發(fā)展趨勢(shì)分析
- 2023年浙江省溫州市中考數(shù)學(xué)真題含解析
- 陜西省榆林市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)
評(píng)論
0/150
提交評(píng)論