已閱讀5頁,還剩54頁未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
C 編程風(fēng)格培訓(xùn) 東信北郵信息技術(shù)有限公司 培訓(xùn)目的 熟練掌握基本的C 編程規(guī)范正確使用C 語言的特性了解一些基本的C 的編程技巧 內(nèi)容簡介 文件結(jié)構(gòu)程序版式基本命名規(guī)則表達(dá)式和基本語句函數(shù)設(shè)計(jì)內(nèi)存管理C 的特性其他的一些注意事項(xiàng) 文件結(jié)構(gòu) 基本概念 文件結(jié)構(gòu) 每個(gè)C C程序通常分為兩個(gè)文件 一個(gè)文件用于保存程序的聲明 declaration 稱為頭文件 另一個(gè)文件用于保存程序的實(shí)現(xiàn) implementation 稱為定義 definition 文件 C C程序的頭文件以 h 或 hpp 為后綴 C程序的定義文件以 c 為后綴 C 程序的定義文件通常以 C 為后綴 也有一些系統(tǒng)以 cpp cc 或 cxx 為后綴 版權(quán)和版本申明 文件結(jié)構(gòu) Copyright C 2000EASTCOM BUPTInc Filename smapcommand h Description headerfileofsmapcommand C Author LiWei History 2000 07 24Created 頭文件的結(jié)構(gòu) 文件結(jié)構(gòu) 為了防止頭文件被重復(fù)引用 應(yīng)當(dāng)用ifndef define endif結(jié)構(gòu)產(chǎn)生預(yù)處理塊 用 include格式來引用標(biāo)準(zhǔn)庫的頭文件 編譯器將從標(biāo)準(zhǔn)庫目錄開始搜索 用 include filename h 格式來引用非標(biāo)準(zhǔn)庫的頭文件 編譯器將從用戶的工作目錄開始搜索 頭文件中只存放 聲明 而不存放 定義 不提倡使用全局變量 定義文件的結(jié)構(gòu) 文件結(jié)構(gòu) ifndefGRAPHICS H 防止graphics h被重復(fù)引用 defineGRAPHICS H include 引用標(biāo)準(zhǔn)庫的頭文件 include myheader h 引用非標(biāo)準(zhǔn)庫的頭文件 voidFunction1 全局函數(shù)聲明 classBox 類結(jié)構(gòu)聲明 endif 目錄結(jié)構(gòu) 如果一個(gè)軟件的頭文件數(shù)目比較多 如超過十個(gè) 通常應(yīng)將頭文件和定義文件分別保存于不同的目錄 以便于維護(hù) 例如可將頭文件保存于include目錄 將定義文件保存于source目錄 可以是多級目錄 如果某些頭文件是私有的 它不會(huì)被用戶的程序直接引用 則沒有必要公開其 聲明 為了加強(qiáng)信息隱藏 這些私有的頭文件可以和定義文件存放于同一個(gè)目錄 程序版式 空行 程序版式 在每個(gè)類聲明之后 每個(gè)函數(shù)定義結(jié)束之后都要加空行 在一個(gè)函數(shù)體內(nèi) 邏輯上密切相關(guān)的語句之間不加空行 其它地方應(yīng)加空行分隔 空行 程序版式 空行voidFunction1 空行voidFunction2 空行voidFunction3 空行 程序版式 空行while condition statement1 空行if condition statement2 else statement3 空行statement4 代碼行 程序版式 一行代碼只做一件事情 如只定義一個(gè)變量 或只寫一條語句 這樣的代碼容易閱讀 并且方便于寫注釋 if for while do等語句自占一行 執(zhí)行語句不得緊跟其后 不論執(zhí)行語句有多少都要加 這樣可以防止書寫失誤 盡可能在定義變量的同時(shí)初始化該變量 代碼行 程序版式 風(fēng)格一if width height dosomething 風(fēng)格二if width height dosomething intwidth 10 定義并初紿化width 長行拆分 程序版式 代碼行最大長度宜控制在70至80個(gè)字符以內(nèi) 代碼行不要過長 否則眼睛看不過來 也不便于打印 長表達(dá)式要在低優(yōu)先級操作符處拆分成新行 操作符放在新行之首 以便突出操作符 拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn) 使排版整齊 語句可讀 長行拆分 程序版式 if variable1 variable12 縮進(jìn) 程序版式 不要使用TAB鍵 最好使用4個(gè)空格作為縮進(jìn) 注釋 程序版式 邊寫代碼邊注釋 修改代碼同時(shí)修改相應(yīng)的注釋 以保證注釋與代碼的一致性 不再有用的注釋要?jiǎng)h除 注釋的位置應(yīng)與被描述的代碼相鄰 可以放在代碼的上方或右方 不可放在下方 如果代碼本來就是清楚的 則不必加注釋 否則多此一舉 令人厭煩 比如 j 大家注意啦 j的值加一啦 注釋 程序版式 函數(shù)的注釋 應(yīng)該可以盡量清晰的說明函數(shù)的功能 輸入輸出參數(shù) 比如 函數(shù)名稱 operatorLogin 功能描述 處理操作員登陸 參數(shù)說明 data 操作員登陸的命令對象指針 返回值 備注 voidoperatorLogin ScDataType data 注釋 程序版式 修改注釋 應(yīng)該用簡潔的語言說明修改人 全名 修改時(shí)間和修改目的 比如 age 23 lugang 2002 07 07 因?yàn)檫^去了一年 所以該參數(shù)值加一age 24 類的版式 程序版式 將public類型的函數(shù)寫在前面 而將private類型的數(shù)據(jù)寫在后面 類的版式 程序版式 classA public voidFunc1 void voidFunc2 void protected inth private inti j floatx y 命名規(guī)則 命名規(guī)則 標(biāo)識(shí)符應(yīng)當(dāng)直觀且可以拼讀命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致 程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識(shí)符 voidfoo intx 函數(shù)foo與FOO容易混淆voidFOO floatx 命名規(guī)則 程序中不要出現(xiàn)標(biāo)識(shí)符完全相同的局部變量和全局變量 盡管兩者的作用域不同而不會(huì)發(fā)生語法錯(cuò)誤 但會(huì)使人誤解 如果標(biāo)識(shí)符有多個(gè)單詞組成 每個(gè)單詞的第一個(gè)字母應(yīng)大寫 首單詞除外 如果是縮寫則縮寫的第一個(gè)字母大寫 其余的小寫 比如 intoldValueCode intoldHlrCode HLR是縮寫 命名規(guī)則 變量的名字應(yīng)當(dāng)使用 名詞 或者 形容詞 名詞 floatvalue floatoldValue 全局函數(shù)的名字應(yīng)當(dāng)使用 動(dòng)詞 或者 動(dòng)詞 名詞 動(dòng)賓詞組 類的成員函數(shù)應(yīng)當(dāng)只使用 動(dòng)詞 被省略掉的名詞就是對象本身 drawBox 全局函數(shù)box draw 類的成員函數(shù) 命名規(guī)則 類名用大寫字母開頭的單詞組合而成 例如 classNode 類名classLeafNode 類名函數(shù)名用小寫字母開頭的單詞組合而成 voiddraw void 函數(shù)名voidsetValue intvalue 函數(shù)名 命名規(guī)則 變量和參數(shù)用小寫字母開頭的單詞組合而成 例如 BOOLflag intdrawMode 常量全用大寫的字母 用下劃線分割單詞 例如 constintMAX 100 constintMAX LENGTH 100 命名規(guī)則 靜態(tài)變量加前綴s 表示static 如果不得已需要全局變量 則使全局變量加前綴g 表示global 類的數(shù)據(jù)成員加前綴m 表示member 這樣可以避免數(shù)據(jù)成員與成員函數(shù)的參數(shù)同名 表達(dá)式和基本語句 if語句 表達(dá)式和基本語句 不可將布爾變量直接與TRUE FALSE或者1 0進(jìn)行比較 if flag 表示flag為真if flag 表示flag為假 if語句 表達(dá)式和基本語句 應(yīng)當(dāng)將整型變量用 或 直接與0比較 假設(shè)整型變量的名字為value 它與零值比較的標(biāo)準(zhǔn)if語句如下 if value 0 if value 0 不可模仿布爾變量的風(fēng)格而寫成if value 會(huì)讓人誤解value是布爾變量if value if語句 表達(dá)式和基本語句 不可將浮點(diǎn)變量用 或 與任何數(shù)字比較 應(yīng)該設(shè)法轉(zhuǎn)化成 或 EPSINON x EPSINON 其中EPSINON是允許的誤差 即精度 if語句 表達(dá)式和基本語句 應(yīng)當(dāng)將指針變量用 或 與NULL比較 比如 char p NULL if p NULL deletep switch語句 表達(dá)式和基本語句 每個(gè)case語句的結(jié)尾不要忘了加break 否則將導(dǎo)致多個(gè)分支重疊 除非有意使多個(gè)分支重疊 不要忘記最后那個(gè)default分支 即使程序真的不需要default處理 也應(yīng)該保留語句 switch語句 表達(dá)式和基本語句 intvalue switch value 1 break 2 default 函數(shù)設(shè)計(jì) 參數(shù)的設(shè)計(jì) 函數(shù)設(shè)計(jì) 一個(gè)函數(shù)的代碼短的行數(shù)不應(yīng)該超過80行 如果超過了 這個(gè)函數(shù)的設(shè)計(jì)存在一定問題 避免函數(shù)有太多的參數(shù) 參數(shù)個(gè)數(shù)盡量控制在5個(gè)以內(nèi) 如果參數(shù)太多 在使用時(shí)容易將參數(shù)類型或順序搞錯(cuò) 返回值的規(guī)則 函數(shù)設(shè)計(jì) 不要省略返回值的類型 不要將正常值和錯(cuò)誤標(biāo)志混在一起返回 正常值用輸出參數(shù)獲得 而錯(cuò)誤標(biāo)志用return語句返回 內(nèi)存管理 從靜態(tài)存儲(chǔ)區(qū)域分配 內(nèi)存在程序編譯的時(shí)候就已經(jīng)分配好 這塊內(nèi)存在程序的整個(gè)運(yùn)行期間都存在 例如全局變量 static變量 在棧上創(chuàng)建 在執(zhí)行函數(shù)時(shí) 函數(shù)內(nèi)局部變量的存儲(chǔ)單元都可以在棧上創(chuàng)建 函數(shù)執(zhí)行結(jié)束時(shí)這些存儲(chǔ)單元自動(dòng)被釋放 從堆上分配 亦稱動(dòng)態(tài)內(nèi)存分配 程序在運(yùn)行的時(shí)候用malloc或new申請任意多少的內(nèi)存 程序員自己負(fù)責(zé)在何時(shí)用free或delete釋放內(nèi)存 內(nèi)存分配方式 內(nèi)存管理 常見的內(nèi)存錯(cuò)誤及其對策 用malloc或new申請內(nèi)存之后 應(yīng)該立即檢查指針值是否為NULL 防止使用指針值為NULL的內(nèi)存 不要忘記為數(shù)組和動(dòng)態(tài)內(nèi)存賦初值 防止將未被初始化的內(nèi)存作為右值使用 避免數(shù)組或指針的下標(biāo)越界 特別要當(dāng)心發(fā)生 多1 或者 少1 操作 常見的內(nèi)存錯(cuò)誤及其對策 動(dòng)態(tài)內(nèi)存的申請與釋放必須配對 防止內(nèi)存泄漏 用free或delete釋放了內(nèi)存之后 立即將指針設(shè)置為NULL 防止產(chǎn)生 野指針 new和delete 以及malloc和free必須配套使用 不可混用 如果對一個(gè)空指針進(jìn)行free或delete操作 系統(tǒng)不會(huì)報(bào)錯(cuò) 程序也不會(huì)異常終止 常見的內(nèi)存錯(cuò)誤及其對策 內(nèi)存拷貝函數(shù)memcpy要慎用比如 charstr2 10 hellolg charstr1 6 inti 1 memcpy str1 str2 10 動(dòng)態(tài)內(nèi)存會(huì)被自動(dòng)釋放嗎 voidFunc void char p char malloc 100 動(dòng)態(tài)內(nèi)存會(huì)自動(dòng)釋放嗎 內(nèi)存耗盡怎么辦 判斷指針是否為NULL 如果是則馬上用return語句終止本函數(shù) 判斷指針是否為NULL 如果是則馬上用exit 1 終止整個(gè)程序的運(yùn)行 為new和malloc設(shè)置異常處理函數(shù) 例如可以用set new hander函數(shù) C 的特性 類的構(gòu)造和析構(gòu)函數(shù) 類的成員變量初始化應(yīng)該盡量放在構(gòu)造函數(shù)中進(jìn)行 類的析構(gòu)函數(shù)中應(yīng)該釋放所有在該類的中分配的動(dòng)態(tài)內(nèi)存 類的構(gòu)造和析構(gòu)函數(shù) 比如 ClassA的declaration如下 classClassA public ClassA ClassA private intdistrubutr1 boolifInitial char buffer 類的構(gòu)造和析構(gòu)函數(shù) ClassA的definition如下 ClassA ClassA distrubutr1 0 ifInitial true p NULL ClassA ClassA deletebuffer 其他特性 函數(shù)和運(yùn)算符重載OverrideInline的使用拷貝構(gòu)造函數(shù)繼承和組合Const的使用 其他的一些注意事項(xiàng) 其他的一些注意事項(xiàng) 當(dāng)心那些視覺上不易分辨的操作符發(fā)生書寫錯(cuò)誤 我們經(jīng)常會(huì)把 誤寫成 象 這類符號(hào)也很容易發(fā)生 丟1 失誤 然而編譯器卻不一定能自動(dòng)指出這類錯(cuò)誤 變量 指針 數(shù)組 被創(chuàng)建之后應(yīng)當(dāng)及時(shí)把它們初始化 以防止把未被初始化的變量當(dāng)成右值使用 其他的一些注意事項(xiàng) 當(dāng)心數(shù)據(jù)類型轉(zhuǎn)換發(fā)生錯(cuò)誤 盡量使用顯式的數(shù)據(jù)類型轉(zhuǎn)換 讓人們知道發(fā)生了什么事 避免讓編譯器輕悄悄地進(jìn)行隱式的數(shù)據(jù)類型轉(zhuǎn)換 當(dāng)心變量發(fā)生上溢或
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 長春信息技術(shù)職業(yè)學(xué)院《自動(dòng)化實(shí)踐初步》2023-2024學(xué)年第一學(xué)期期末試卷
- 玉林師范學(xué)院《結(jié)構(gòu)模型設(shè)計(jì)制作》2023-2024學(xué)年第一學(xué)期期末試卷
- 市場波動(dòng)下的投資決策風(fēng)險(xiǎn)分析
- 財(cái)務(wù)戰(zhàn)略述職報(bào)告模板
- 保險(xiǎn)業(yè)務(wù)月度報(bào)告模板
- 保險(xiǎn)行業(yè)發(fā)展展望模板
- 實(shí)施環(huán)保生活講座
- 社團(tuán)招新簡報(bào)
- 統(tǒng)編版六年級語文上冊寒假作業(yè)(十一)(有答案)
- 2025年四川省眉山市區(qū)縣高考數(shù)學(xué)一診模擬試卷(含答案)
- 制造樣品生產(chǎn)作業(yè)指導(dǎo)書
- 服務(wù)經(jīng)營培訓(xùn)課件ppt 老客戶經(jīng)營綜合版
- MT/T 199-1996煤礦用液壓鉆車通用技術(shù)條件
- GB/T 6144-1985合成切削液
- GB/T 10357.1-2013家具力學(xué)性能試驗(yàn)第1部分:桌類強(qiáng)度和耐久性
- 第三方在線糾紛解決機(jī)制(ODR)述評,國際商法論文
- 公寓de全人物攻略本為個(gè)人愛好而制成如需轉(zhuǎn)載注明信息
- 第5章-群體-團(tuán)隊(duì)溝通-管理溝通
- 腎臟病飲食依從行為量表(RABQ)附有答案
- 深基坑-安全教育課件
- 園林施工管理大型園林集團(tuán)南部區(qū)域養(yǎng)護(hù)標(biāo)準(zhǔn)圖例
評論
0/150
提交評論