版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
質(zhì)量管理知識++高質(zhì)量編程指南高質(zhì)量C++/C編程指南文件狀態(tài)文件標(biāo)識:[]草稿文件當(dāng)前版本:1.0[√]正式文件作者:林銳博士[]更改正式文件完成日期:2001年7月24日感謝閱讀前言軟件質(zhì)量是被大多數(shù)程序員掛在嘴上而不是放在心上的東西!謝謝閱讀除了完全外行和真正的編程高手外,初讀本書,你最先的感受將是驚慌:“哇!我謝謝閱讀以前捏造的C++/C程序怎么會有那么多的毛病?”別難過,作者只不過比你早幾年、多幾次驚慌而已。請花一兩個小時認(rèn)真閱讀這本百頁經(jīng)書,你將會獲益匪淺,這是前面N-1個讀者的精品文檔放心下載建議。一、編程老手與高手的誤區(qū)自從計(jì)算機(jī)問世以來,程序設(shè)計(jì)就成了令人羨慕的職業(yè),程序員在受人寵愛之后容感謝閱讀易發(fā)展成為毛病特多卻常能自我臭美的群體。如今在Internet上流傳的“真正”的程序員據(jù)說是這樣的:精品文檔放心下載(1)真正的程序員沒有進(jìn)度表,只有討好領(lǐng)導(dǎo)的馬屁精才有進(jìn)度表,真正的程序員會讓精品文檔放心下載領(lǐng)導(dǎo)提心吊膽。(2)真正的程序員不寫使用說明書,用戶應(yīng)當(dāng)自己去猜想程序的功能。感謝閱讀(3)真正的程序員幾乎不寫代碼的注釋,如果注釋很難寫,它理所當(dāng)然也很難讀。精品文檔放心下載(4)真正的程序員不畫流程圖,原始人和文盲才會干這事。感謝閱讀(5)真正的程序員不看參考手冊,新手和膽小鬼才會看。感謝閱讀(6)真正的程序員不寫文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。謝謝閱讀(7)真正的程序員認(rèn)為自己比用戶更明白用戶需要什么。謝謝閱讀(8)真正的程序員不接受團(tuán)隊(duì)開發(fā)的理念,除非他自己是頭頭。精品文檔放心下載(9)真正的程序員的程序不會在第一次就正確運(yùn)行,但是他們愿意守著機(jī)器進(jìn)行若干個精品文檔放心下載30小時的調(diào)試改錯。(10)真正的程序員不會在上午9:00到下午5:00之間工作,如果你看到他在上午9:00感謝閱讀工作,這表明他從昨晚一直干到現(xiàn)在?!邆渖鲜鎏卣髟蕉?,越顯得水平高,資格老。所以別奇怪,程序員的很多缺點(diǎn)竟然感謝閱讀可以被當(dāng)作優(yōu)點(diǎn)來欣賞。就象在武俠小說中,那些獨(dú)來獨(dú)往、不受約束且?guī)c(diǎn)邪氣的高謝謝閱讀手最令人崇拜。我曾經(jīng)也這樣信奉,并且希望自己成為那樣的“真正”的程序員,結(jié)果精品文檔放心下載沒有得到好下場。我從讀大學(xué)到博士畢業(yè)十年來一直勤奮好學(xué),累計(jì)編寫了數(shù)十萬行C++/C代碼。有謝謝閱讀這樣的苦勞和疲勞,我應(yīng)該稱得上是編程老手了吧?我開發(fā)的軟件都與科研相關(guān)(集成電路CAD和3D圖形學(xué)領(lǐng)域),動輒數(shù)萬行程序,謝謝閱讀技術(shù)復(fù)雜,難度頗高。這些軟件頻頻獲獎,有一個軟件獲得首屆中國大學(xué)生電腦大賽軟感謝閱讀件展示一等獎。在1995年開發(fā)的一套圖形軟件庫到2000年還有人買。羅列出這些“業(yè)感謝閱讀績,可以說明我算得上是編程高手了吧?可惜這種個人感覺不等于事實(shí)。讀博期間我曾用一年時間開發(fā)了一個近10萬行C++代碼的3D圖形軟件產(chǎn)品,我內(nèi)精品文檔放心下載心得意表面謙虛地向一位真正的軟件高手請教。他雖然從未涉足過3D圖形領(lǐng)域,卻在謝謝閱讀幾十分鐘內(nèi)指出該軟件多處重大設(shè)計(jì)錯誤。讓人感覺那套軟件是用紙糊的華麗衣服,扯感謝閱讀一下掉一塊,戳一下破個洞。我目瞪口呆地意識到這套軟件毫無實(shí)用價值,一年的心血謝謝閱讀白化了,并且害死了自己的軟件公司。人的頓悟通常發(fā)生在最心痛的時刻,在沮喪和心痛之后,我作了深刻反省,“面壁”精品文檔放心下載半年,重新溫習(xí)軟件設(shè)計(jì)的基礎(chǔ)知識。補(bǔ)修“內(nèi)功”之后,又覺得腰板硬了起來。博士精品文檔放心下載畢業(yè)前半年,我曾到微軟中國研究院找工作,接受微軟公司一位資深軟件工程師的面試。感謝閱讀他讓我寫函數(shù)strcpy的代碼。太容易了吧?錯!這么一個小不點(diǎn)的函數(shù),他從三個方面考查:(1)編程風(fēng)格;(2)出錯處理;(3)算法復(fù)雜度分析(用于提高性能)。在大學(xué)里從來沒有人如此嚴(yán)格地考查過我的程序。我化了半個小時,修改了數(shù)次,精品文檔放心下載他還不盡滿意,讓我回家好好琢磨。我精神抖擻地進(jìn)“考場,大汗淋漓地出“考場。感謝閱讀這“高手”當(dāng)?shù)靡蔡C囊了。我又好好地反省了一次。我把反省后的心得體會寫成文章放在網(wǎng)上傳閱,引起了不少軟件開發(fā)人員的共鳴。感謝閱讀我因此有幸和國產(chǎn)大型IT企業(yè)如華為、上海貝爾、中興等公司的同志們廣泛交流。大謝謝閱讀家認(rèn)為提高質(zhì)量與生產(chǎn)率是軟件工程要解決的核心問題。高質(zhì)量程序設(shè)計(jì)是非常重要的精品文檔放心下載環(huán)節(jié),畢竟軟件是靠編程來實(shí)現(xiàn)的。我們心目中的老手們和高手們能否編寫出高質(zhì)量的程序來?感謝閱讀不見得都能!就我的經(jīng)歷與閱歷來看,國內(nèi)大學(xué)的計(jì)算機(jī)教育壓根就沒有灌輸高質(zhì)量程序設(shè)計(jì)的謝謝閱讀觀念,教師們和學(xué)生們也很少自覺關(guān)心軟件的質(zhì)量。勤奮好學(xué)的程序員長期在低質(zhì)量的謝謝閱讀程序堆中滾爬,吃盡苦頭之后才有一些心得體會,長進(jìn)極慢,我就是一例。感謝閱讀現(xiàn)在國內(nèi)IT企業(yè)擁有學(xué)士、碩士、博士文憑的軟件開發(fā)人員比比皆是,但他們在接謝謝閱讀受大學(xué)教育時就“先天不足,豈能一到企業(yè)就突然實(shí)現(xiàn)質(zhì)的飛躍。試問有多少軟件開精品文檔放心下載發(fā)人員對正確性、健壯性、可靠性、效率、易用性、可讀性(可理解性)、可擴(kuò)展性、精品文檔放心下載可復(fù)用性、兼容性、可移植性等質(zhì)量屬性了如指掌?并且能在實(shí)踐中運(yùn)用自如?。“高感謝閱讀質(zhì)量”可不是干活小心點(diǎn)就能實(shí)現(xiàn)的!我們有充分的理由疑慮:(1)編程老手可能會長期用隱含錯誤的方式編程(習(xí)慣成自然),發(fā)現(xiàn)毛病后都不愿相精品文檔放心下載信那是真的?。?)編程高手可以在某一領(lǐng)域?qū)懗鰳O有水平的代碼,但未必能從全局把握軟件質(zhì)量的謝謝閱讀方方面面。事實(shí)證明如此。我到上海貝爾工作一年來,陸續(xù)面試或測試過近百名“新老程謝謝閱讀序員的編程技能,質(zhì)量合格率大約是10%。很少有人能夠?qū)懗鐾耆腺|(zhì)量要求的if謝謝閱讀語句,很多程序員對指針、內(nèi)存管理一知半解,……。領(lǐng)導(dǎo)們不敢相信這是真的。我做過現(xiàn)場試驗(yàn):有一次部門新進(jìn)14名碩士生,在開歡精品文檔放心下載迎會之前對他們進(jìn)行“C++/C編程技能”摸底考試。我問大家試題難不難?所有的人都感謝閱讀回答不難。結(jié)果沒有一個人及格,有半數(shù)人得零分。競爭對手公司的朋友們也做過試驗(yàn),感謝閱讀同樣一敗涂地。真的不是我“心狠手辣”或者要求過高,而是很多軟件開發(fā)人員對自己的要求不夠謝謝閱讀高。要知道華為、上海貝爾、中興等公司的員工素質(zhì)在國內(nèi)IT企業(yè)中是比較前列的,倘謝謝閱讀若他們的編程質(zhì)量都如此差的話,我們怎么敢期望中小公司拿出高質(zhì)量的軟件呢?連程感謝閱讀序都編不好,還談什么振興民族軟件產(chǎn)業(yè),豈不胡扯。我打算定義編程老手和編程高手,請您別見笑。定義1:能長期穩(wěn)定地編寫出高質(zhì)量程序的程序員稱為編程老手。感謝閱讀定義2:能長期穩(wěn)定地編寫出高難度、高質(zhì)量程序的程序員稱為編程高手。精品文檔放心下載根據(jù)上述定義,馬上得到第一推論:我既不是高手也算不上是老手。感謝閱讀在寫此書前,我閱讀了不少程序設(shè)計(jì)方面的英文著作,越看越羞慚。因?yàn)榘l(fā)現(xiàn)自己精品文檔放心下載連編程基本技能都未能全面掌握,頂多算是二流水平,還好意思談什么老手和高手。希精品文檔放心下載望和我一樣在國內(nèi)土生土長的程序員朋友們能夠做到:(1)知錯就改;(2)經(jīng)常溫故而知新;(3)堅(jiān)持學(xué)習(xí),天天向上。二、本書導(dǎo)讀首先請做附錄B的C++/C試題(不要看答案),考查自己的編程質(zhì)量究竟如何。然后精品文檔放心下載參照答案嚴(yán)格打分。(1)如果你只得了幾十分,請不要聲張,也不要太難過。編程質(zhì)量差往往是由于不良謝謝閱讀習(xí)慣造成的,與人的智力、能力沒有多大關(guān)系,還是有藥可救的。成績越差,可以進(jìn)步感謝閱讀的空間就越大,中國不就是在落后中趕超發(fā)達(dá)資本主義國家嗎?只要你能下決心改掉不精品文檔放心下載良的編程習(xí)慣,第二次考試就能及格了。(2)如果你考及格了,表明你的技術(shù)基礎(chǔ)不錯,希望你能虛心學(xué)習(xí)、不斷進(jìn)步。如果精品文檔放心下載你還沒有找到合適的工作單位,不妨到上海貝爾試一試。(3)如果你考出85分以上的好成績,你有義務(wù)和資格為你所在的團(tuán)隊(duì)作“C++/C編程”感謝閱讀培訓(xùn)。希望你能和我們多多交流、相互促進(jìn)。半年前我曾經(jīng)發(fā)現(xiàn)一顆好苗子,就把他挖精品文檔放心下載到我們小組來。(4)如果你在沒有任何提示的情況下考了滿分,希望你能收我做你的徒弟。謝謝閱讀編程考試結(jié)束后,請閱讀本書的正文。本書第一章至第六章主要論述C++/C編程風(fēng)格。難度不高,但是細(xì)節(jié)比較多。別小感謝閱讀看了,提高質(zhì)量就是要從這些點(diǎn)點(diǎn)滴滴做起。世上不存在最好的編程風(fēng)格,一切因需求謝謝閱讀而定。團(tuán)隊(duì)開發(fā)講究風(fēng)格一致,如果制定了大家認(rèn)可的編程風(fēng)格,那么所有組員都要遵謝謝閱讀守。如果讀者覺得本書的編程風(fēng)格比較合你的工作,那么就采用它,不要只看不做。人謝謝閱讀在小時候說話發(fā)音不準(zhǔn),寫字潦草,如果不改正,總有后悔的時候。編程也是同樣道理。精品文檔放心下載第七章至第十一章是專題論述,技術(shù)難度比較高,看書時要積極思考。特別是第七謝謝閱讀章“內(nèi)存管理,讀了并不表示懂了,懂了并不表示就能正確使用。有一位同事看了第精品文檔放心下載七章后覺得“野指針”寫得不錯,與我切磋了一把。可是過了兩周,他告訴我,他忙了感謝閱讀兩天追查出一個Bug,想不到又是“野指針”出問題,只好重讀第七章。感謝閱讀光看本書對提高編程質(zhì)量是有限的,建議大家閱讀本書的參考文獻(xiàn),那些都是經(jīng)典謝謝閱讀名著。如果你的編程質(zhì)量已經(jīng)過關(guān)了,不要就此滿足。如果你想成為優(yōu)秀的軟件開發(fā)人員,謝謝閱讀建議你閱讀并按照CMMI規(guī)范做事,讓自己的綜合水平上升一個臺階。上海貝爾的員工精品文檔放心下載可以向網(wǎng)絡(luò)應(yīng)用事業(yè)部軟件工程研究小組索取CMMI有關(guān)資料,最好能參加培訓(xùn)。感謝閱讀三、版權(quán)聲明本書的大部分內(nèi)容取材于作者一年前的書籍手稿(尚未出版),現(xiàn)整理匯編成為上海精品文檔放心下載貝爾網(wǎng)絡(luò)應(yīng)用事業(yè)部的一個規(guī)范化文件,同時作為培訓(xùn)教材。感謝閱讀由于C++/C編程是眾所周知的技術(shù),沒有秘密可言。編程的好經(jīng)驗(yàn)應(yīng)該大家共享,感謝閱讀我們自己也是這么學(xué)來的。作者愿意公開本書的電子文檔。謝謝閱讀版權(quán)聲明如下:(1)讀者可以任意拷貝、修改本書的內(nèi)容,但不可以篡改作者及所屬單位。謝謝閱讀(2)未經(jīng)作者許可,不得出版或大量印發(fā)本書。(3)如果競爭對手公司的員工得到本書,請勿公開使用,以免發(fā)生糾紛。精品文檔放心下載預(yù)計(jì)到2002年7月,我們將建立切合中國國情的CMMI3級解決方案。屆時,包括感謝閱讀本書在內(nèi)的約1000頁規(guī)范將嚴(yán)格受控。歡迎讀者對本書提出批評建議。林銳,2001年7月第1章文件結(jié)構(gòu)每個C++/C程序通常分為兩個文件。一個文件用于保存程序的聲明(declaration感謝閱讀稱為頭文件。另一個文件用于保存程序的實(shí)現(xiàn)(implementationdefinition)精品文檔放心下載文件。C++/C程序的頭文件以“.h”為后綴,C程序的定義文件以“.c”為后綴,C++程序精品文檔放心下載的定義文件通常以“.cpp”為后綴(也有一些系統(tǒng)以“.cc”或“.cxx”感謝閱讀1.1版權(quán)和版本的聲明版權(quán)和版本的聲明位于頭文件和定義文件的開頭(參見示例1-1),主要內(nèi)容有:感謝閱讀(1)版權(quán)信息。(2)文件名稱,標(biāo)識符,摘要。(3)當(dāng)前版本號,作者/修改者,完成日期。(4)版本歷史信息。/**Copyright(c)2001,上海貝爾有限公司網(wǎng)絡(luò)應(yīng)用事業(yè)部感謝閱讀*Allrightsreserved.**文件名稱:filename.h*文件標(biāo)識:見配置管理計(jì)劃書*摘要:簡要描述本文件的內(nèi)容**當(dāng)前版本:1.1*作者:輸入作者(或修改者)名字*完成日期:2001年7月20日**取代版本:1.0*原作者:輸入原作者(或修改者)名字*完成日期:2001年5月10日*/示例1-1版權(quán)和版本的聲明1.2頭文件的結(jié)構(gòu)頭文件由三部分內(nèi)容組成:(1)頭文件開頭處的版權(quán)和版本聲明(參見示例1-1精品文檔放心下載(2)預(yù)處理塊。(3)函數(shù)和類結(jié)構(gòu)聲明等。假設(shè)頭文件名稱為graphics.h,頭文件的結(jié)構(gòu)參見示例1-2。謝謝閱讀【規(guī)則1-2-1】為了防止頭文件被重復(fù)引用,應(yīng)當(dāng)用ifndef/define/endif結(jié)構(gòu)產(chǎn)精品文檔放心下載生預(yù)處理塊。【規(guī)則1-2-2】用#include<filename.h>格式來引用標(biāo)準(zhǔn)庫的頭文件(編譯器將感謝閱讀從標(biāo)準(zhǔn)庫目錄開始搜索)?!疽?guī)則1-2-3】用#include“filename.h”格式來引用非標(biāo)準(zhǔn)庫的頭文件(編譯感謝閱讀器將從用戶的工作目錄開始搜索)?!窘ㄗh1-2-1】頭文件中只存放“聲明”而不存放“定義”感謝閱讀在C++語法中,類的成員函數(shù)可以在聲明的同時被定義,并且自動成為內(nèi)聯(lián)函數(shù)。謝謝閱讀這雖然會帶來書寫上的方便,但卻造成了風(fēng)格不一致,弊大于利。建議將成員函數(shù)的定謝謝閱讀義與聲明分開,不論該函數(shù)體有多么小?!窘ㄗh1-2-2】不提倡使用全局變量,盡量不要在頭文件中出現(xiàn)象externint謝謝閱讀value這類聲明。//版權(quán)和版本聲明見示例1-1,此處省略。#ifndefGRAPHICS_H//防止graphics.h被重復(fù)引用謝謝閱讀#defineGRAPHICS_H#include<math.h>//引用標(biāo)準(zhǔn)庫的頭文件謝謝閱讀…#include“myheader.h”//引用非標(biāo)準(zhǔn)庫的頭文件謝謝閱讀…voidFunction1(…);//全局函數(shù)聲明精品文檔放心下載…classBox//類結(jié)構(gòu)聲明{…};#endif示例1-2C++/C頭文件的結(jié)構(gòu)1.3定義文件的結(jié)構(gòu)定義文件有三部分內(nèi)容:(1)定義文件開頭處的版權(quán)和版本聲明(參見示例1-1謝謝閱讀(2)對一些頭文件的引用。(3)程序的實(shí)現(xiàn)體(包括數(shù)據(jù)和代碼)。假設(shè)定義文件的名稱為graphics.cpp,定義文件的結(jié)構(gòu)參見示例1-3。精品文檔放心下載//版權(quán)和版本聲明見示例1-1,此處省略。#include“graphics.h”//引用頭文件感謝閱讀…//全局函數(shù)的實(shí)現(xiàn)體voidFunction1(…){…}//類成員函數(shù)的實(shí)現(xiàn)體voidBox::Draw(…){…}示例1-3C++/C定義文件的結(jié)構(gòu)1.4頭文件的作用早期的編程語言如Basic、Fortran沒有頭文件的概念,C++/C語言的初學(xué)者雖然會感謝閱讀用使用頭文件,但常常不明其理。這里對頭文件的作用略作解釋:謝謝閱讀(1)通過頭文件來調(diào)用庫功能。在很多場合,源代碼不便(或不準(zhǔn))向用戶公布,只精品文檔放心下載要向用戶提供頭文件和二進(jìn)制的庫即可。用戶只需要按照頭文件中的接口聲明來調(diào)用庫感謝閱讀功能,而不必關(guān)心接口怎么實(shí)現(xiàn)的。編譯器會從庫中提取相應(yīng)的代碼。精品文檔放心下載(2)頭文件能加強(qiáng)類型安全檢查。如果某個接口被實(shí)現(xiàn)或被使用時,其方式與頭文件感謝閱讀中的聲明不一致,編譯器就會指出錯誤,這一簡單的規(guī)則能大大減輕程序員調(diào)試、改錯謝謝閱讀的負(fù)擔(dān)。1.5目錄結(jié)構(gòu)如果一個軟件的頭文件數(shù)目比較多(如超過十個),通常應(yīng)將頭文件和定義文件分別精品文檔放心下載保存于不同的目錄,以便于維護(hù)。例如可將頭文件保存于include目錄,將定義文件保存于source目錄(可以是多級精品文檔放心下載如果某些頭文件是私有的,它不會被用戶的程序直接引用,則沒有必要公開其“聲感謝閱讀明。為了加強(qiáng)信息隱藏,這些私有的頭文件可以和定義文件存放于同一個目錄。感謝閱讀第2章程序的版式版式雖然不會影響程序的功能,但會影響可讀性。程序的版式追求清晰、美觀,是謝謝閱讀程序風(fēng)格的重要構(gòu)成因素。可以把程序的版式比喻為“書法。好的“書法可讓人對程序一目了然,看得興致謝謝閱讀勃勃。差的程序“書法”如螃蟹爬行,讓人看得索然無味,更令維護(hù)者煩惱有加。請程精品文檔放心下載序員們學(xué)習(xí)程序的“書法,彌補(bǔ)大學(xué)計(jì)算機(jī)教育的漏洞,實(shí)在很有必要。謝謝閱讀2.1空行空行起著分隔程序段落的作用。空行得體(不過多也不過少)將使程序的布局更加謝謝閱讀清晰??招胁粫速M(fèi)內(nèi)存,雖然打印含有空行的程序是會多消耗一些紙張,但是值得。感謝閱讀所以不要舍不得用空行?!疽?guī)則2-1-1在每個類聲明之后、每個函數(shù)定義結(jié)束之后都要加空行。參見示例2-1謝謝閱讀(a)【規(guī)則2-1-2】在一個函數(shù)體內(nèi),邏揖上密切相關(guān)的語句之間不加空行,其它地方精品文檔放心下載應(yīng)加空行分隔。參見示例2-1(b)//空行//空行voidFunction1(…)while(condition)精品文檔放心下載{{…statement1;}//空行//空行if(condition)voidFunction2(…){{statement2;…}}else//空行{voidFunction3(…)statement3;精品文檔放心下載{}…//空行}statement4;}示例2-1(a)函數(shù)之間的空行示例2-1(b)函數(shù)內(nèi)部的空行感謝閱讀2.2代碼行【規(guī)則2-2-1】一行代碼只做一件事情,如只定義一個變量,或只寫一條語句。這謝謝閱讀樣的代碼容易閱讀,并且方便于寫注釋?!疽?guī)則2-2-2】if、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。不謝謝閱讀論執(zhí)行語句有多少都要加{}。這樣可以防止書寫失誤。示例2-2(a)為風(fēng)格良好的代碼行,示例2-2(b)為風(fēng)格不良的代碼行。謝謝閱讀intwidth;//寬度intwidth,height,depth;//寬度高度深度精品文檔放心下載intheight;//高度intdepth;//深度x=a+b;X=a+b;y=c+d;z=e+f;精品文檔放心下載y=c+d;z=e+f;if(width<height)if(width<height)dosomething();感謝閱讀{dosomething();}for(initialization;condition;update)for(initialization;condition;update)謝謝閱讀{dosomething();dosomething();other();}//空行other();示例2-2(a)風(fēng)格良好的代碼行示例2-2(b)風(fēng)格不良的代碼行精品文檔放心下載【建議2-2-1】盡可能在定義變量的同時初始化該變量(就近原則)感謝閱讀如果變量的引用處和其定義處相隔比較遠(yuǎn),變量的初始化很容易被忘記。如果引用謝謝閱讀了未被初始化的變量,可能會導(dǎo)致程序錯誤。本建議可以減少隱患。例如感謝閱讀intwidth=10;//定義并初紿化width精品文檔放心下載intheight=10;//定義并初紿化height感謝閱讀intdepth=10;//定義并初紿化depth感謝閱讀2.3代碼行內(nèi)的空格【規(guī)則2-3-1】關(guān)鍵字之后要留空格。象const、virtual、inline、case等關(guān)鍵謝謝閱讀字之后至少要留一個空格,否則無法辨析關(guān)鍵字。象ifforwhile等關(guān)鍵字之后感謝閱讀應(yīng)留一個空格再跟左括號‘(,以突出關(guān)鍵字?!疽?guī)則2-3-2】函數(shù)名之后不要留空格,緊跟左括號‘(,以與關(guān)鍵字區(qū)別。謝謝閱讀【規(guī)則2-3-3‘(’向后緊跟,‘‘‘;’向前緊跟,緊跟處不留空格。感謝閱讀【規(guī)則2-3-4‘’之后要留空格,如Function(x,y,z)。如果‘;’不是一行的精品文檔放心下載結(jié)束符號,其后要留空格,如for(initialization;condition;update)。精品文檔放心下載【規(guī)則2-3-5】賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符,謝謝閱讀如“=”“+=”“>=”“<=”“+”“*”“%”“&&”“||”“<<”,“^”等二元精品文檔放心下載操作符的前后應(yīng)當(dāng)加空格?!疽?guī)則2-3-6】一元操作符如“!”“~”“++”“--”“&”(地址運(yùn)算符)等前后精品文檔放心下載不加空格?!疽?guī)則2-3-7】象“[]“.”“->”這類操作符前后不加空格。精品文檔放心下載【建議2-3-1】對于表達(dá)式比較長的for語句和if語句,為了緊湊起見可以適當(dāng)?shù)馗兄x閱讀去掉一些空格,如for(i=0;i<10;i++)和if((a<=b)&&(c<=d))感謝閱讀voidFunc1(intx,inty,intz);//良好的風(fēng)格精品文檔放心下載voidFunc1(intx,inty,intz);//不良的風(fēng)格精品文檔放心下載if(year>=2000)//良好的風(fēng)格感謝閱讀if(year>=2000)//不良的風(fēng)格if((a>=b)&&(c<=d))//良好的風(fēng)格感謝閱讀if(a>=b&&c<=d)//不良的風(fēng)格for(i=0;i<10;i++)//良好的風(fēng)格精品文檔放心下載for(i=0;i<10;i++)//不良的風(fēng)格感謝閱讀for(i=0;I<10;i++)//過多的空格感謝閱讀x=a<b?a:b;//良好的風(fēng)格謝謝閱讀x=a<b?a:b;//不好的風(fēng)格int*x=&y;//良好的風(fēng)格int*x=&y;//不良的風(fēng)格array[5]=0;//不要寫成array[5]=0;謝謝閱讀a.Function();//不要寫成a.Function();感謝閱讀b->Function();//不要寫成b->Function();謝謝閱讀示例2-3代碼行內(nèi)的空格2.4對齊【規(guī)則2-4-1】程序的分界符‘{’和‘}’應(yīng)獨(dú)占一行并且位于同一列,同時與引精品文檔放心下載用它們的語句左對齊?!疽?guī)則2-4-2】{}之內(nèi)的代碼塊在‘{’右邊數(shù)格處左對齊。精品文檔放心下載示例2-4(a)為風(fēng)格良好的對齊,示例2-4(b)為風(fēng)格不良的對齊。精品文檔放心下載voidFunction(intx)voidFunction(intx){精品文檔放心下載{…//programcode…//programcode}}if(condition)if(condition){謝謝閱讀{…//programcode…//programcode}}else{else…//programcode{}…//programcode}for(initialization;condition;update)for(initialization;condition;update){謝謝閱讀{…//programcode…//programcode}}While(condition)while(condition){精品文檔放心下載{…//programcode…//programcode}}如果出現(xiàn)嵌套的{},則使用縮進(jìn)對齊,如:{…{…}…}示例2-4(a)風(fēng)格良好的對齊示例2-4(b)風(fēng)格不良的對齊謝謝閱讀2.5長行拆分【規(guī)則2-5-1】代碼行最大長度宜控制在70至80個字符以內(nèi)。代碼行不要過長,謝謝閱讀否則眼睛看不過來,也不便于打印。【規(guī)則2-5-2】長表達(dá)式要在低優(yōu)先級操作符處拆分成新行,操作符放在新行之首謝謝閱讀(以便突出操作符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀。精品文檔放心下載if((very_longer_variable1>=very_longer_variable12)精品文檔放心下載&&(very_longer_variable3<=very_longer_variable14)謝謝閱讀&&(very_longer_variable5<=very_longer_variable16))謝謝閱讀{dosomething();}virtualCMatrixCMultiplyMatrix(CMatrixleftMatrix,謝謝閱讀CMatrixrightMatrix);for(very_longer_initialization;感謝閱讀very_longer_condition;very_longer_update){dosomething();}示例2-5長行的拆分2.6修飾符的位置修飾符*和&應(yīng)該靠近數(shù)據(jù)類型還是該靠近變量名,是個有爭議的活題。精品文檔放心下載若將修飾符*靠近數(shù)據(jù)類型,例如:int*x;從語義上講此寫法比較直觀,即x精品文檔放心下載是int類型的指針。上述寫法的弊端是容易引起誤解,例如:int*x,y;此處y容易被誤解為指針變謝謝閱讀量。雖然將x和y分行定義可以避免誤解,但并不是人人都愿意這樣做。精品文檔放心下載【規(guī)則2-6-1】應(yīng)當(dāng)將修飾符*和&緊靠變量名感謝閱讀例如:char*name;int*x,y;//此處y不會被誤解為指針精品文檔放心下載2.7注釋C語言的注釋符為“/*…*/”。C++語言中,程序塊的注釋常采用“/*…*/”,行注釋謝謝閱讀一般采用“//…”。注釋通常用于:(1)版本、版權(quán)聲明;(2)函數(shù)接口說明;(3)重要的代碼行或段落提示。雖然注釋有助于理解代碼,但注意不可過多地使用注釋。參見示例2-6。感謝閱讀【規(guī)則2-7-1注釋是對代碼的“提示,而不是文檔。程序中的注釋不可喧賓奪主,謝謝閱讀注釋太多了會讓人眼花繚亂。注釋的花樣要少?!疽?guī)則2-7-2】如果代碼本來就是清楚的,則不必加注釋。否則多此一舉,令人厭謝謝閱讀煩。例如i++;//i加1,多余的注釋【規(guī)則2-7-3】邊寫代碼邊注釋,修改代碼同時修改相應(yīng)的注釋,以保證注釋與代感謝閱讀碼的一致性。不再有用的注釋要刪除?!疽?guī)則2-7-4】注釋應(yīng)當(dāng)準(zhǔn)確、易懂,防止注釋有二義性。錯誤的注釋不但無益反精品文檔放心下載而有害。【規(guī)則2-7-5】盡量避免在注釋中使用縮寫,特別是不常用縮寫。精品文檔放心下載【規(guī)則2-7-6】注釋的位置應(yīng)與被描述的代碼相鄰,可以放在代碼的上方或右方,感謝閱讀不可放在下方?!疽?guī)則2-7-8】當(dāng)代碼比較長,特別是有多重嵌套時,應(yīng)當(dāng)在一些段落的結(jié)束處加謝謝閱讀注釋,便于閱讀。/*if(…)*函數(shù)介紹:{*輸入?yún)?shù):…*輸出參數(shù):while(…)*返回值:{*/…voidFunction(floatx,floaty,}//endofwhile精品文檔放心下載floatz)…{}//endofif…}示例2-6程序的注釋2.8類的版式類可以將數(shù)據(jù)和函數(shù)封裝在一起,其中函數(shù)表示了類的行為(或稱服務(wù))。類提供關(guān)謝謝閱讀鍵字public、protected和private,分別用于聲明哪些數(shù)據(jù)和函數(shù)是公有的、受保護(hù)精品文檔放心下載的或者是私有的。這樣可以達(dá)到信息隱藏的目的,即讓類僅僅公開必須要讓外界知道的謝謝閱讀內(nèi)容,而隱藏其它一切內(nèi)容。我們不可以濫用類的封裝功能,不要把它當(dāng)成火鍋,什么感謝閱讀東西都往里扔。類的版式主要有兩種方式:(1private類型的數(shù)據(jù)寫在前面,而將public類型的函數(shù)寫在后面,如示例8-3(a謝謝閱讀采用這種版式的程序員主張類的設(shè)計(jì)“以數(shù)據(jù)為中心,重點(diǎn)關(guān)注類的內(nèi)部結(jié)構(gòu)。精品文檔放心下載(2)將public類型的函數(shù)寫在前面,而將private類型的數(shù)據(jù)寫在后面,如示例8.3精品文檔放心下載(b)采用這種版式的程序員主張類的設(shè)計(jì)“以行為為中心,重點(diǎn)關(guān)注的是類應(yīng)該提供感謝閱讀什么樣的接口(或服務(wù))。很多C++教課書受到BiarneStroustrup第一本著作的影響,不知不覺地采用了“以精品文檔放心下載數(shù)據(jù)為中心”的書寫方式,并不見得有多少道理。我建議讀者采用“以行為為中心”的書寫方式,即首先考慮類應(yīng)該提供什么樣的函精品文檔放心下載數(shù)。這是很多人的經(jīng)驗(yàn)——“這樣做不僅讓自己在設(shè)計(jì)類時思路清晰,而且方便別人閱精品文檔放心下載讀。因?yàn)橛脩糇铌P(guān)心的是接口,誰愿意先看到一堆私有數(shù)據(jù)成員!”精品文檔放心下載classAclassA{{private:public:inti,j;voidFunc1(void);感謝閱讀floatx,y;voidFunc2(void);感謝閱讀……public:private:voidFunc1(void);inti,j;精品文檔放心下載voidFunc2(void);floatx,y;精品文檔放心下載……}}示例8.3(a)以數(shù)據(jù)為中心版式示例8.3(b)以行為為中心的版式謝謝閱讀第3章命名規(guī)則比較著名的命名規(guī)則當(dāng)推Microsoft公司的“匈牙利”法,該命名規(guī)則的主要思想精品文檔放心下載“在變量和函數(shù)名中加入前綴以增進(jìn)人們對程序的理解。例如所有的字符變量均以ch謝謝閱讀為前綴,若是指針變量則追加前綴p。如果一個變量由ppch開頭,則表明它是指向字符精品文檔放心下載指針的指針?!靶傺览狈ㄗ畲蟮娜秉c(diǎn)是煩瑣,例如inti,j,k;floatx,y,z;倘若采用“匈牙利”命名規(guī)則,則應(yīng)當(dāng)寫成intiI,iJ,ik;//前綴i表示int類型感謝閱讀floatfX,fY,fZ;//前綴f表示float類型感謝閱讀如此煩瑣的程序會讓絕大多數(shù)程序員無法忍受。據(jù)考察,沒有一種命名規(guī)則可以讓所有的程序員贊同,程序設(shè)計(jì)教科書一般都不指感謝閱讀定命名規(guī)則。命名規(guī)則對軟件產(chǎn)品而言并不是“成敗悠關(guān)”的事,我們不要化太多精力謝謝閱讀試圖發(fā)明世界上最好的命名規(guī)則,而應(yīng)當(dāng)制定一種令大多數(shù)項(xiàng)目成員滿意的命名規(guī)則,感謝閱讀并在項(xiàng)目中貫徹實(shí)施。3.1共性規(guī)則本節(jié)論述的共性規(guī)則是被大多數(shù)程序員采納的,我們應(yīng)當(dāng)在遵循這些共性規(guī)則的前謝謝閱讀提下,再擴(kuò)充特定的規(guī)則,如3.2節(jié)?!疽?guī)則3-1-1】標(biāo)識符應(yīng)當(dāng)直觀且可以拼讀,可望文知意,不必進(jìn)行“解碼。感謝閱讀標(biāo)識符最好采用英文單詞或其組合,便于記憶和閱讀。切忌使用漢語拼音來命名。感謝閱讀程序中的英文單詞一般不會太復(fù)雜,用詞應(yīng)當(dāng)準(zhǔn)確。例如不要把CurrentValue寫成感謝閱讀NowValue?!疽?guī)則3-1-2】標(biāo)識符的長度應(yīng)當(dāng)符合“min-length&&max-information”原則。精品文檔放心下載幾十年前老ANSIC規(guī)定名字不準(zhǔn)超過6個字符,現(xiàn)今的C++/C不再有此限制。一般精品文檔放心下載來說,長名字能更好地表達(dá)含義,所以函數(shù)名、變量名、類名長達(dá)十幾個字符不足為怪。感謝閱讀那么名字是否越長約好?不見得!例如變量名maxval就比maxValueUntilOverflow好用。謝謝閱讀單字符的名字也是有用的,常見的如i,j,k,m,n,x,y,z等,它們通常可用作函數(shù)內(nèi)的局精品文檔放心下載部變量?!疽?guī)則3-1-3】命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致。精品文檔放心下載例如Windows應(yīng)用程序的標(biāo)識符通常采用“大小寫混排的方式,如AddChild感謝閱讀Unix應(yīng)用程序的標(biāo)識符通常采用“小寫加下劃線”的方式,如add_child。別把這兩類感謝閱讀風(fēng)格混在一起用?!疽?guī)則3-1-4】程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識符。謝謝閱讀例如:intx,X;//變量x與X容易混淆謝謝閱讀voidfoo(intx);//函數(shù)foo與FOO容易混淆謝謝閱讀voidFOO(floatx);【規(guī)則3-1-5】程序中不要出現(xiàn)標(biāo)識符完全相同的局部變量和全局變量,盡管兩者感謝閱讀的作用域不同而不會發(fā)生語法錯誤,但會使人誤解?!疽?guī)則3-1-6】變量的名字應(yīng)當(dāng)使用“名詞”或者“形容詞+名詞。精品文檔放心下載例如:floatvalue;floatoldValue;floatnewValue;【規(guī)則3-1-7】全局函數(shù)的名字應(yīng)當(dāng)使用“動詞”或者“動詞+名詞精品文檔放心下載類的成員函數(shù)應(yīng)當(dāng)只使用“動詞,被省略掉的名詞就是對象本身。謝謝閱讀例如:DrawBox();//全局函數(shù)box->Draw();//類的成員函數(shù)【規(guī)則3-1-8】用正確的反義詞組命名具有互斥意義的變量或相反動作的函數(shù)等。精品文檔放心下載例如:intminValue;intmaxValue;intSetValue(…);intGetValue(…);【建議3-1-1】盡量避免名字中出現(xiàn)數(shù)字編號,如Value1,Value2等,除非邏輯上謝謝閱讀的確需要編號。這是為了防止程序員偷懶,不肯為命名動腦筋而導(dǎo)致產(chǎn)生無意義的精品文檔放心下載名字(因?yàn)橛脭?shù)字編號最省事)。3.2簡單的Windows應(yīng)用程序命名規(guī)則作者對“匈牙利”命名規(guī)則做了合理的簡化,下述的命名規(guī)則簡單易用,比較適合精品文檔放心下載于Windows應(yīng)用軟件的開發(fā)?!疽?guī)則3-2-1】類名和函數(shù)名用大寫字母開頭的單詞組合而成。感謝閱讀例如:classNode;//類名classLeafNode;//類名voidDraw(void);//函數(shù)名voidSetValue(intvalue);//函數(shù)名感謝閱讀【規(guī)則3-2-2】變量和參數(shù)用小寫字母開頭的單詞組合而成。精品文檔放心下載例如:BOOLflag;intdrawMode;【規(guī)則3-2-3】常量全用大寫的字母,用下劃線分割單詞。精品文檔放心下載例如:constintMAX=100;constintMAX_LENGTH=100;感謝閱讀【規(guī)則3-2-4】靜態(tài)變量加前綴s_(表示static精品文檔放心下載例如:voidInit(…){staticints_initValue;//靜態(tài)變量精品文檔放心下載…}【規(guī)則3-2-5】如果不得已需要全局變量,則使全局變量加前綴g_(表示global謝謝閱讀例如:intg_howManyPeople;//全局變量精品文檔放心下載intg_howMuchMoney;//全局變量感謝閱讀【規(guī)則3-2-6】類的數(shù)據(jù)成員加前綴m_(表示member),這樣可以避免數(shù)據(jù)成員與精品文檔放心下載成員函數(shù)的參數(shù)同名。例如:voidObject::SetValue(intwidth,intheight)精品文檔放心下載{m_width=width;m_height=height;}【規(guī)則3-2-7】為了防止某一軟件庫中的一些標(biāo)識符和其它軟件庫中的沖突,可以精品文檔放心下載為各種標(biāo)識符加上能反映軟件性質(zhì)的前綴。例如三維圖形標(biāo)準(zhǔn)OpenGL的所有庫函數(shù)謝謝閱讀均以gl開頭,所有常量(或宏定義)均以GL開頭。感謝閱讀3.3簡單的Unix應(yīng)用程序命名規(guī)則第4章表達(dá)式和基本語句讀者可能懷疑:連if、for、while、goto、switch這樣簡單的東西也要探討編程風(fēng)感謝閱讀格,是不是小題大做?我真的發(fā)覺很多程序員用隱含錯誤的方式寫表達(dá)式和基本語句,我自己也犯過類似謝謝閱讀的錯誤。表達(dá)式和語句都屬于C++/C的短語結(jié)構(gòu)語法。它們看似簡單,但使用時隱患比較多。謝謝閱讀本章歸納了正確使用表達(dá)式和語句的一些規(guī)則與建議。4.1運(yùn)算符的優(yōu)先級C++/C語言的運(yùn)算符有數(shù)十個,運(yùn)算符的優(yōu)先級與結(jié)合律如表4-1所示。注意一元謝謝閱讀運(yùn)算符+-*的優(yōu)先級高于對應(yīng)的二元運(yùn)算符。優(yōu)先級運(yùn)算符結(jié)合律
()[]->.從左至右
!~++--(類型)sizeof從右至左
從+-*&感謝閱讀*/%從左至右高+-從左至右<<>>從左至右到<<=>>=從左至右==!=從左至右低&從左至右^從左至右排|從左至右&&從左至右列||從右至左?:從右至左=+=-=*=/=%=&=^=從左至右謝謝閱讀|=<<=>>=表4-1運(yùn)算符的優(yōu)先級與結(jié)合律【規(guī)則4-1-1】如果代碼行中的運(yùn)算符比較多,用括號確定表達(dá)式的操作順序,避謝謝閱讀免使用默認(rèn)的優(yōu)先級。由于將表4-1熟記是比較困難的,為了防止產(chǎn)生歧義并提高可讀性,應(yīng)當(dāng)用括號確精品文檔放心下載定表達(dá)式的操作順序。例如:word=(high<<8)|lowif((a|b)&&(a&c))4.2復(fù)合表達(dá)式如a=b=c=0這樣的表達(dá)式稱為復(fù)合表達(dá)式。允許復(fù)合表達(dá)式存在的理由是:感謝閱讀(1)書寫簡潔;(2)可以提高編譯效率。但要防止濫用復(fù)合表達(dá)式。精品文檔放心下載【規(guī)則4-2-1】不要編寫太復(fù)雜的復(fù)合表達(dá)式。感謝閱讀例如:i=a>=b&&c<d&&c+f<=g+h;//復(fù)合表達(dá)式過于復(fù)雜謝謝閱讀【規(guī)則4-2-2】不要有多用途的復(fù)合表達(dá)式。例如:d=(a=b+c)+r;該表達(dá)式既求a值又求d值。應(yīng)該拆分為兩個獨(dú)立的語句:謝謝閱讀a=b+c;d=a+r;【規(guī)則4-2-3】不要把程序中的復(fù)合表達(dá)式與“真正的數(shù)學(xué)表達(dá)式”混淆。精品文檔放心下載例如:if(a<b<c)//a<b<c是數(shù)學(xué)表達(dá)式而不是程序表達(dá)式謝謝閱讀并不表示if((a<b)&&(b<c))而是成了令人費(fèi)解的if((a<b)<c)4.3if語句if語句是C++/C語言中最簡單、最常用的語句,然而很多程序員用隱含錯誤的方式感謝閱讀寫if語句。本節(jié)以“與零值比較”為例,展開討論。4.3.1布爾變量與零值比較【規(guī)則4-3-1】不可將布爾變量直接與TRUE、FALSE或者1、0進(jìn)行比較。精品文檔放心下載根據(jù)布爾類型的語義,零值為“假(記為FALSE“真(記為TRUE精品文檔放心下載TRUE的值究竟是什么并沒有統(tǒng)一的標(biāo)準(zhǔn)。例如VisualC++將TRUE定義為1Visual感謝閱讀Basic則將TRUE定義為-1。假設(shè)布爾變量名字為flag,它與零值比較的標(biāo)準(zhǔn)if語句如下:謝謝閱讀if(flag)//表示flag為真if(!flag)//表示flag為假其它的用法都屬于不良風(fēng)格,例如:if(flag==TRUE)if(flag==1)if(flag==FALSE)if(flag==0)4.3.2整型變量與零值比較【規(guī)則4-3-2】應(yīng)當(dāng)將整型變量用“==”或“!=”直接與0比較。感謝閱讀假設(shè)整型變量的名字為value,它與零值比較的標(biāo)準(zhǔn)if語句如下:感謝閱讀if(value==0)if(value!=0)不可模仿布爾變量的風(fēng)格而寫成if(value)//會讓人誤解value是布爾變量謝謝閱讀if(!value)4.3.3浮點(diǎn)變量與零值比較【規(guī)則4-3-3】不可將浮點(diǎn)變量用“==”或“!=”與任何數(shù)字比較。感謝閱讀千萬要留意,無論是float還是double類型的變量,都有精度限制。所以一定要避感謝閱讀免將浮點(diǎn)變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。精品文檔放心下載假設(shè)浮點(diǎn)變量的名字為x,應(yīng)當(dāng)將if(x==0.0)//隱含錯誤的比較轉(zhuǎn)化為if((x>=-EPSINON)&&(x<=EPSINON))謝謝閱讀其中EPSINON是允許的誤差(即精度)。4.3.4指針變量與零值比較【規(guī)則4-3-4】應(yīng)當(dāng)將指針變量用“==”或“!=”與NULL比較。感謝閱讀指針變量的零值是“空(記為NULLNULL的值與0相同,但是兩者意義不精品文檔放心下載同。假設(shè)指針變量的名字為p,它與零值比較的標(biāo)準(zhǔn)if語句如下:感謝閱讀if(p==NULL)//p與NULL顯式比較,強(qiáng)調(diào)p是指針變量感謝閱讀if(p!=NULL)不要寫成if(p==0)//容易讓人誤解p是整型變量感謝閱讀if(p!=0)或者if(p)//容易讓人誤解p是布爾變量if(!p)4.3.5對if語句的補(bǔ)充說明有時候我們可能會看到if(NULL==p)這樣古怪的格式。不是程序?qū)戝e了,是程謝謝閱讀序員為了防止將if(p==NULL)誤寫成if(p=NULL),而有意把p和NULL顛倒。編精品文檔放心下載譯器認(rèn)為if(p=NULL)是合法的,但是會指出if(NULL=p)是錯誤的,因?yàn)镹ULL謝謝閱讀不能被賦值。程序中有時會遇到if/else/return的組合,應(yīng)該將如下不良風(fēng)格的程序精品文檔放心下載if(condition)returnx;returny;改寫為if(condition){returnx;}else{returny;}或者改寫成更加簡練的return(condition?x:y);謝謝閱讀4.4循環(huán)語句的效率C++/C循環(huán)語句中,for語句使用頻率最高,while語句其次,do語句很少用。本節(jié)精品文檔放心下載重點(diǎn)論述循環(huán)體的效率。提高循環(huán)體效率的基本辦法是降低循環(huán)體的復(fù)雜性。精品文檔放心下載【建議4-4-1】在多重循環(huán)中,如果有可能,應(yīng)當(dāng)將最長的循環(huán)放在最內(nèi)層,最短精品文檔放心下載的循環(huán)放在最外層,以減少CPU跨切循環(huán)層的次數(shù)。例如示例4-4(b)的效率比示例感謝閱讀4-4(a)的高。for(row=0;row<100;row++)for(col=0;col<5;col++)謝謝閱讀{{for(col=0;col<5;col++)for(row=0;row<100;row++)謝謝閱讀{{sum=sum+a[row][col];sum=sum+a[row][col];精品文檔放心下載}}}}示例4-4(a)低效率:長循環(huán)在最外層示例4-4(b)高效率:長循環(huán)在最內(nèi)層感謝閱讀【建議4-4-2】如果循環(huán)體內(nèi)存在邏輯判斷,并且循環(huán)次數(shù)很大,宜將邏輯判斷移感謝閱讀到循環(huán)體的外面。示例4-4(c)的程序比示例4-4(d)多執(zhí)行了N-1次邏輯判斷。并且謝謝閱讀由于前者老要進(jìn)行邏輯判斷,打斷了循環(huán)“流水線”作業(yè),使得編譯器不能對循環(huán)精品文檔放心下載進(jìn)行優(yōu)化處理,降低了效率。如果N非常大,最好采用示例4-4(d)的寫法,可以提謝謝閱讀高效率。如果N非常小,兩者效率差別并不明顯,采用示例4-4(c)的寫法比較好,感謝閱讀因?yàn)槌绦蚋雍啙?。for(i=0;i<N;i++)if(condition)謝謝閱讀{{if(condition)for(i=0;i<N;i++)謝謝閱讀DoSomething();DoSomething();精品文檔放心下載else}DoOtherthing();else}{for(i=0;i<N;i++)DoOtherthing();}表4-4(c)效率低但程序簡潔表4-4(d)效率高但程序不簡潔精品文檔放心下載4.5for語句的循環(huán)控制變量【規(guī)則4-5-1】不可在for循環(huán)體內(nèi)修改循環(huán)變量,防止for循環(huán)失去控制。精品文檔放心下載【建議4-5-1】建議for語句的循環(huán)控制變量的取值采用“半開半閉區(qū)間”寫法。謝謝閱讀示例4-5(a)中的x值屬于半開半閉區(qū)間“0=<x<N”,起點(diǎn)到終點(diǎn)的間隔為N感謝閱讀環(huán)次數(shù)為N。示例4-5(b)中的x值屬于閉區(qū)間“0=<x<=N-1”,起點(diǎn)到終點(diǎn)的間隔為N-1,循感謝閱讀環(huán)次數(shù)為N。相比之下,示例4-5(a)的寫法更加直觀,盡管兩者的功能是相同的。謝謝閱讀for(intx=0;x<N;x++)for(intx=0;x<=N-1;x++)感謝閱讀{{……}}示例4-5(a)循環(huán)變量屬于半開半閉區(qū)間示例4-5(b)循環(huán)變量屬于閉區(qū)間精品文檔放心下載4.6switch語句有了if語句為什么還要switch語句?switch是多分支選擇語句,而if語句只有兩個分支可供選擇。雖然可以用嵌套的if感謝閱讀語句來實(shí)現(xiàn)多分支選擇,但那樣的程序冗長難讀。這是switch語句存在的理由。感謝閱讀switch語句的基本格式是:switch(variable){casevalue1:…break;casevalue2:…break;…default:…break;}【規(guī)則4-6-1每個case語句的結(jié)尾不要忘了加break,否則將導(dǎo)致多個分支重疊(除精品文檔放心下載非有意使多個分支重疊)?!疽?guī)則4-6-2】不要忘記最后那個default分支。即使程序真的不需要default處謝謝閱讀理,也應(yīng)該保留語句default:break;這樣做并非多此一舉,而是為了防止別人感謝閱讀誤以為你忘了default處理。4.7goto語句自從提倡結(jié)構(gòu)化設(shè)計(jì)以來,goto就成了有爭議的語句。首先,由于goto語句可以謝謝閱讀靈活跳轉(zhuǎn),如果不加限制,它的確會破壞結(jié)構(gòu)化設(shè)計(jì)風(fēng)格。其次,goto語句經(jīng)常帶來錯謝謝閱讀誤或隱患。它可能跳過了某些對象的構(gòu)造、變量的初始化、重要的計(jì)算等語句,例如:謝謝閱讀gotostate;Strings1,s2;//被goto跳過謝謝閱讀intsum=0;//被goto跳過…state:…如果編譯器不能發(fā)覺此類錯誤,每用一次goto語句都可能留下隱患。精品文檔放心下載很多人建議廢除C++/C的goto語句,以絕后患。但實(shí)事求是地說,錯誤是程序員自感謝閱讀己造成的,不是goto的過錯。goto語句至少有一處可顯神通,它能從多重循環(huán)體中咻感謝閱讀地一下子跳到外面,用不著寫很多次的break語句;例如感謝閱讀{…{…{…gotoerror;}}}error:…就象樓房著火了,來不及從樓梯一級一級往下走,可從窗口跳出火坑。所以我們主精品文檔放心下載張少用、慎用goto語句,而不是禁用。第5章常量常量是一種標(biāo)識符,它的值在運(yùn)行期間恒定不變。C語言用#define來定義常量(稱謝謝閱讀C++語言除了#define外還可以用const來定義常量(稱為const精品文檔放心下載5.1為什么需要常量如果不使用常量,直接在程序中填寫數(shù)字或字符串,將會有什么麻煩?感謝閱讀(1)程序的可讀性(可理解性)變差。程序員自己會忘記那些數(shù)字或字符串是什么意精品文檔放心下載思,用戶則更加不知它們從何處來、表示什么。(2)在程序的很多地方輸入同樣的數(shù)字或字符串,難保不發(fā)生書寫錯誤。感謝閱讀(3)如果要修改數(shù)字或字符串,則會在很多地方改動,既麻煩又容易出錯。精品文檔放心下載【規(guī)則5-1-1】盡量使用含義直觀的常量來表示那些將在程序中多次出現(xiàn)的數(shù)字精品文檔放心下載或字符串。例如:#defineMAX100/*C語言的宏常量*/感謝閱讀constintMAX=100;//C++語言的const常量精品文檔放心下載constfloatPI=3.14159;//C++語言的const常量精品文檔放心下載5.2const與#define的比較C++語言可以用const來定義常量,也可以用#define來定義常量。但是前者比后精品文檔放心下載者有更多的優(yōu)點(diǎn):(1)const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可以對前者進(jìn)行類型安感謝閱讀全檢查。而對后者只進(jìn)行字符替換,沒有類型安全檢查,并且在字符替換可能會感謝閱讀產(chǎn)生意料不到的錯誤(邊際效應(yīng))。(2)有些集成化的調(diào)試工具可以對const常量進(jìn)行調(diào)試,但是不能對宏常量進(jìn)行調(diào)試。精品文檔放心下載【規(guī)則5-2-1】在C++程序中只使用const常量而不使用宏常量,即const常量完感謝閱讀全取代宏常量。5.3常量定義規(guī)則【規(guī)則5-3-1】需要對外公開的常量放在頭文件中,不需要對外公開的常量放在定精品文檔放心下載義文件的頭部。為便于管理,可以把不同模塊的常量集中存放在一個公共的頭文件精品文檔放心下載中?!疽?guī)則5-3-2】如果某一常量與其它常量密切相關(guān),應(yīng)在定義中包含這種關(guān)系,而謝謝閱讀不應(yīng)給出一些孤立的值。例如:constfloatRADIUS=100;constfloatDIAMETER=RADIUS*2;精品文檔放心下載5.4類中的常量有時我們希望某些常量只在類中有效。由于#define定義的宏常量是全局的,不能精品文檔放心下載達(dá)到目的,于是想當(dāng)然地覺得應(yīng)該用const修飾數(shù)據(jù)成員來實(shí)現(xiàn)。const數(shù)據(jù)成員的確謝謝閱讀是存在的,但其含義卻不是我們所期望的。const數(shù)據(jù)成員只在某個對象生存期內(nèi)是常感謝閱讀量,而對于整個類而言卻是可變的,因?yàn)轭惪梢詣?chuàng)建多個對象,不同的對象其const數(shù)精品文檔放心下載據(jù)成員的值可以不同。不能在類聲明中初始化const數(shù)據(jù)成員。以下用法是錯誤的,因?yàn)轭惖膶ο笪幢粍?chuàng)感謝閱讀建時,編譯器不知道SIZE的值是什么。classA{…constintSIZE=100;//錯誤,企圖在類聲明中初始化const數(shù)據(jù)成員感謝閱讀intarray[SIZE];//錯誤,未知的SIZE感謝閱讀};const數(shù)據(jù)成員的初始化只能在類構(gòu)造函數(shù)的初始化表中進(jìn)行,例如謝謝閱讀classA{…A(intsize);//構(gòu)造函數(shù)constintSIZE;};A::A(intsize):SIZE(size)//構(gòu)造函數(shù)的初始化表精品文檔放心下載{…}Aa(100);//對象a的SIZE值為100感謝閱讀Ab(200);//對象b的SIZE值為200謝謝閱讀怎樣才能建立在整個類中都恒定的常量呢?別指望const數(shù)據(jù)成員了,應(yīng)該用類中謝謝閱讀的枚舉常量來實(shí)現(xiàn)。例如classA{…enum{SIZE1=100,SIZE2=200};//枚舉常量精品文檔放心下載intarray1[SIZE1];intarray2[SIZE2];};枚舉常量不會占用對象的存儲空間,它們在編譯時被全部求值。枚舉常量的缺點(diǎn)是:謝謝閱讀它的隱含數(shù)據(jù)類型是整數(shù),其最大值有限,且不能表示浮點(diǎn)數(shù)(如PI=3.14159謝謝閱讀第6章函數(shù)設(shè)計(jì)函數(shù)是C++/C程序的基本功能單元,其重要性不言而喻。函數(shù)設(shè)計(jì)的細(xì)微缺點(diǎn)很容感謝閱讀易導(dǎo)致該函數(shù)被錯用,所以光使函數(shù)的功能正確是不夠的。本章重點(diǎn)論述函數(shù)的接口設(shè)感謝閱讀計(jì)和內(nèi)部實(shí)現(xiàn)的一些規(guī)則。函數(shù)接口的兩個要素是參數(shù)和返回值。C語言中,函數(shù)的參數(shù)和返回值的傳遞方式精品文檔放心下載有兩種:值傳遞(passbyvalue)和指針傳遞(passbypointerC++語言中多了精品文檔放心下載引用傳遞(passbyreference)。由于引用傳遞的性質(zhì)象指針傳遞,而使用方式卻象值感謝閱讀傳遞,初學(xué)者常常迷惑不解,容易引起混亂,請先閱讀6.6節(jié)“引用與指針的比較。感謝閱讀6.1參數(shù)的規(guī)則【規(guī)則6-1-1】參數(shù)的書寫要完整,不要貪圖省事只寫參數(shù)的類型而省略參數(shù)名字。謝謝閱讀如果函數(shù)沒有參數(shù),則用void填充。例如:voidSetValue(intwidth,intheight);//良好的風(fēng)格感謝閱讀voidSetValue(int,int);//不良的風(fēng)格謝謝閱讀floatGetValue(void);//良好的風(fēng)格精品文檔放心下載floatGetValue();//不良的風(fēng)格感謝閱讀【規(guī)則6-1-2】參數(shù)命名要恰當(dāng),順序要合理。精品文檔放心下載例如編寫字符串拷貝函數(shù)StringCopy,它有兩個參數(shù)。如果把參數(shù)名字起為str1感謝閱讀和str2,例如voidStringCopy(char*str1,char*str2);感謝閱讀那么我們很難搞清楚究竟是把str1拷貝到str2中,還是剛好倒過來。謝謝閱讀可以把參數(shù)名字起得更有意義,如叫strSource和strDestination。這樣從名字上感謝閱讀就可以看出應(yīng)該把strSource拷貝到strDestination。謝謝閱讀還有一個問題,這兩個參數(shù)那一個該在前那一個該在后?參數(shù)的順序要遵循程序員謝謝閱讀的習(xí)慣。一般地,應(yīng)將目的參數(shù)放在前面,源參數(shù)放在后面。感謝閱讀如果將函數(shù)聲明為:voidStringCopy(char*strSource,char*strDestination);謝謝閱讀別人在使用時可能會不假思索地寫成如下形式:charstr[20];StringCopy(str,“HelloWorld”);//參數(shù)順序顛倒謝謝閱讀【規(guī)則6-1-3如果參數(shù)是指針,且僅作輸入用,則應(yīng)在類型前加const,以防止該感謝閱讀指針在函數(shù)體內(nèi)被意外修改。例如:voidStringCopy(char*strDestination,constchar*strSource);感謝閱讀【規(guī)則6-1-4】如果輸入?yún)?shù)以值傳遞的方式傳遞對象,則宜改用“const&”方式謝謝閱讀來傳遞,這樣可以省去臨時對象的構(gòu)造和析構(gòu)過程,從而提高效率。精品文檔放心下載【建議6-1-1】避免函數(shù)有太多的參數(shù),參數(shù)個數(shù)盡量控制在5個以內(nèi)。如果參數(shù)感謝閱讀太多,在使用時容易將參數(shù)類型或順序搞錯?!窘ㄗh6-1-2】盡量不要使用類型和數(shù)目不確定的參數(shù)。精品文檔放心下載C標(biāo)準(zhǔn)庫函數(shù)printf是采用不確定參數(shù)的典型代表,其原型為:謝謝閱讀intprintf(constchat*format[,argument]…);謝謝閱讀這種風(fēng)格的函數(shù)在編譯時喪失了嚴(yán)格的類型安全檢查。6.2返回值的規(guī)則【規(guī)則6-2-1】不要省略返回值的類型。C語言中,凡不加類型說明的函數(shù),一律自動按整型處理。這樣做不會有什么好處,謝謝閱讀卻容易被誤解為void類型。C++語言有很嚴(yán)格的類型安全檢查,不允許上述情況發(fā)生。由于C++程序可以調(diào)用C謝謝閱讀函數(shù),為了避免混亂,規(guī)定任何C++/C函數(shù)都必須有類型。如果函數(shù)沒有返回值,那感謝閱讀么應(yīng)聲明為void類型?!疽?guī)則6-2-2】函數(shù)名字與返回值類型在語義上不可沖突。謝謝閱讀違反這條規(guī)則的典型代表是C標(biāo)準(zhǔn)庫函數(shù)getchar。精品文檔放心下載例如:charc;c=getchar();if(c==EOF)…按照getchar名字的意思,將變量c聲明為char類型是很自然的事情。但不幸的是謝謝閱讀getchar的確不是char類型,而是int類型,其原型如下:謝謝閱讀intgetchar(void);由于c是char類型,取值范圍是[-128127],如果宏EOF的值在char的取值范圍謝謝閱讀之外,那么if語句將總是失敗,這種“危險”人們一般哪里料得到!導(dǎo)致本例錯誤的精品文檔放心下載責(zé)任并不在用戶,是函數(shù)getchar誤導(dǎo)了使用者。感謝閱讀【規(guī)則6-2-3】不要將正常值和錯誤標(biāo)志混在一起返回。正常值用輸出參數(shù)獲得,精品文檔放心下載而錯誤標(biāo)志用return語句返回。回顧上例,C標(biāo)準(zhǔn)庫函數(shù)的設(shè)計(jì)者為什么要將getchar聲明為令人迷糊的int類型精品文檔放心下載呢?他會那么傻嗎?在正常情況下,getchar的確返回單個字符。但如果getchar碰到文件結(jié)束標(biāo)志或謝謝閱讀發(fā)生讀錯誤,它必須返回一個標(biāo)志EOF。為了區(qū)別于正常的字符,只好將EOF定義為負(fù)精品文檔放心下載數(shù)(通常為負(fù)1getchar就成了int類型。感謝閱讀我們在實(shí)際工作中,經(jīng)常會碰到上述令人為難的問題。為了避免出現(xiàn)誤解,我們應(yīng)感謝閱讀該將正常值和錯誤標(biāo)志分開。即:正常值用輸出參數(shù)獲得,而錯誤標(biāo)志用return語句感謝閱讀返回。函數(shù)getchar可以改寫成BOOLGetChar(char*c);感謝閱讀雖然gechar比GetChar靈活,例如putchar(getchar());但是如果getchar用錯謝謝閱讀了,它的靈活性又有什么用呢?【建議6-2-1】有時候函數(shù)原本不需要返回值,但為了增加靈活性如支持鏈?zhǔn)奖磉_(dá),精品文檔放心下載可以附加返回值。例如字符串拷貝函數(shù)strcpy的原型:char*strcpy(char*strDest,constchar*strSrc);謝謝閱讀strcpy函數(shù)將strSrc拷貝至輸出參數(shù)strDest中,同時函數(shù)的返回值又是感謝閱讀strDest。這樣做并非多此一舉,可以獲得如下靈活性:精品文檔放心下載charstr[20];intlength=strlen(strcpy(str,“HelloWorld”));感謝閱讀【建議6-2-2】如果函數(shù)的返回值是一個對象,有些場合用“引用傳遞”替換“值感謝閱讀傳遞”可以提高效率。而有些場合只能用“值傳遞”而不能用“引用傳遞,否則會精品文檔放心下載出錯。例如:classString{…//賦值函數(shù)String&operate=(constString&other);謝謝閱讀//相加函數(shù),如果沒有friend修飾則只許有一個右側(cè)參數(shù)感謝閱讀friendStringoperate+(constString&s1,constString&s2);感謝閱讀private:char*m_data;}String的賦值函數(shù)operate=的實(shí)現(xiàn)如下:謝謝閱讀String&String::operate=(constString&other)精品文檔放心下載{if(this==&other)return*this;deletem_data;m_data=newchar[strlen(other.data)+1];精品文檔放心下載strcpy(m_data,other.data);精品文檔放心下載return*this;//返回的是*this的引用,無需拷貝過程謝謝閱讀}對于賦值函數(shù),應(yīng)當(dāng)用“引用傳遞”的方式返回String對象。如果用“值傳遞”的感謝閱讀方式,雖然功能仍然正確,但由于return語句要把*this拷貝到保存返回值的外部存謝謝閱讀儲單元之中,增加了不必要的開銷,降低了賦值函數(shù)的效率。例如:精品文檔放心下載Stringa,b,c;…a=b;//如果用“值傳遞,將產(chǎn)生一次*this拷貝謝謝閱讀a=b=c;//如果用“值傳遞,將產(chǎn)生兩次*this拷貝感謝閱讀String的相加函數(shù)operate+的實(shí)現(xiàn)如下:感謝閱讀Stringoperate+(constString&s1,constString&s2)感謝閱讀{Stringtemp;deletetemp.data;//temp.data是僅含‘\0’的字符串精品文檔放心下載temp.data=newchar[strlen(s1.data)+strlen(s2.data)+1];精品文檔放心下載strcpy(temp.data,s1.data);精品文檔放心下載strcat(temp.data,s2.data);謝謝閱讀returntemp;}對于相加函數(shù),應(yīng)當(dāng)用“值傳遞”的方式返回String對象。如果改用“引用傳遞,精品文檔放心下載那么函數(shù)返回值是一個指向局部對象temp的“引用。由于temp在函數(shù)結(jié)束時被自動精品文檔放心下載銷毀,將導(dǎo)致返回的“引用”無效。例如:c=a+b;此時a+b并不返回期望值,c什么也得不到,流下了隱患。謝謝閱讀6.3函數(shù)內(nèi)部實(shí)現(xiàn)的規(guī)則不同功能的函數(shù)其內(nèi)部實(shí)現(xiàn)各不相同,看起來似乎無法就“內(nèi)部實(shí)現(xiàn)”達(dá)成一致的謝謝閱讀觀點(diǎn)。但根據(jù)經(jīng)驗(yàn),我們可以在函數(shù)體的“入口處”和“出口處”從嚴(yán)把關(guān),從而提高謝謝閱讀函數(shù)的質(zhì)量。【規(guī)則6-3-1】在函數(shù)體的“入口處,對參數(shù)的有效性進(jìn)行檢查。精品文檔放心下載很多程序錯誤是由非法參數(shù)引起的,我們應(yīng)該充分理解并正確使用“斷言(assert)感謝閱讀來防止此類錯誤。詳見6.5節(jié)“使用斷言?!疽?guī)則6-3-2】在函數(shù)體的“出口處,對return語句的正確性和效率進(jìn)行檢查。精品文檔放心下載如果函數(shù)有返回值,那么函數(shù)的“出口處”是return語句。我們不要輕視return謝謝閱讀語句。如果return語句寫得不好,函數(shù)要么出錯,要么效率低下。謝謝閱讀注意事項(xiàng)如下:(1)return語句不可返回指向“棧內(nèi)存”的“指針”或者“引用,因?yàn)樵搩?nèi)存在函數(shù)感謝閱讀體結(jié)束時被自動銷毀。例如char*Func(void){charstr[]=“helloworld”;//str的內(nèi)存位于棧上謝謝閱讀…returnstr;//將導(dǎo)致錯誤}(2)要搞清楚返回的究竟是“值“指針”還是“引用。感謝閱讀(3)如果函數(shù)返回值是一個對象,要考慮return語句的效率。例如謝謝閱讀returnString(s1+s2);這是臨時對象的語法,表示“創(chuàng)建一個臨時對象并返回它。不要以為它與“先創(chuàng)建謝謝閱讀一個局部對象temp并返回它的結(jié)果”是等價的,如Stringtemp(s1+s2);returntemp;實(shí)質(zhì)不然,上述代碼將發(fā)生三件事。首先,temp對象被創(chuàng)建,同時完成初始化;然謝謝閱讀后拷貝構(gòu)造函數(shù)把temp拷貝到保存返回值的外部存儲單元中;最后,temp在函數(shù)結(jié)束精品文檔放心下載時被銷毀(調(diào)用析構(gòu)函數(shù))。然而“創(chuàng)建一個臨時對象并返回它”的過程是不同的,編謝謝閱讀譯器直接把臨時對象創(chuàng)建并初始化在外部存儲單元中,省去了拷貝和析構(gòu)的化費(fèi),提高感謝閱讀了效率。類似地,我們不要將returnint(x+y);//創(chuàng)建一個臨時變量并返回它精品文檔放心下載寫成inttemp=x+y;returntemp;由于內(nèi)部數(shù)據(jù)類型如int,float,double的變量不存在構(gòu)造函數(shù)與析構(gòu)函數(shù),雖然該感謝閱讀“臨時變量的語法”不會提高多少效率,但是程序更加簡潔易讀。精品文檔放心下載6.4其它建議【建議6-4-1】函數(shù)的功能要單一,不要設(shè)計(jì)多用途的函數(shù)。精品文檔放心下載【建議6-4-2】函數(shù)體的規(guī)模要小,盡量控制在50行代碼之內(nèi)。謝謝閱讀【建議6-4-3】盡量避免函數(shù)帶有“記憶”功能。相同的輸入應(yīng)當(dāng)產(chǎn)生相同的輸出。精品文檔放心下載帶有“記憶”功能的函數(shù),其行為可能是不可預(yù)測的,因?yàn)樗男袨榭赡苋Q于某感謝閱讀種“記憶狀態(tài)。這樣的函數(shù)既不易理解又不利于測試和維護(hù)。在C/C++語言中,函數(shù)的精品文檔放心下載static局部變量是函數(shù)的“記憶”存儲器。建議盡量少用static局部變量,除非必需。精品文檔放心下載【建議6-4-4】不僅要檢查輸入?yún)?shù)的有效性,還要檢查通過其它途徑進(jìn)入函數(shù)體感謝閱讀內(nèi)的變量的有效性,例如全局變量、文件句柄等?!窘ㄗh6-4-5】用于出錯處理的返回值一定要清楚,讓使用者不容易忽視或誤解錯精品文檔放心下載誤情況。6.5使用斷言程序一般分為Debug版本和Release版本,Debug版本用于內(nèi)部調(diào)試,Release版本感謝閱讀發(fā)行給用戶使用。斷言assert是僅在Debug版本起作用的宏,它用于檢查“不應(yīng)該發(fā)生的情況。示感謝閱讀例6-5是一個內(nèi)存復(fù)制函數(shù)。在運(yùn)行過程中,如果assert的參數(shù)為假,那么程序就會中謝謝閱讀止(一般地還會出現(xiàn)提示對話,說明在什么地方引發(fā)了assert感謝閱讀void*memcpy(void*pvTo,constvoid*pvFrom,size_tsize)感謝閱讀{assert((pvTo!=NULL)&&(pvFrom!=NULL));//使用斷言精品文檔放心下載byte*pbTo=(byte*)pvTo;//防止改變pvTo的地址感謝閱讀byte*pbFrom=(byte*)pvFrom;//
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025招投標(biāo)工作計(jì)劃
- 智能小車行業(yè)相關(guān)投資計(jì)劃提議
- 特種電線相關(guān)行業(yè)投資方案
- 工業(yè)淀粉相關(guān)項(xiàng)目投資計(jì)劃書范本
- 2025年年級教師工作計(jì)劃范文
- Unit3 Topic2. 說課稿 -2024-2025學(xué)年仁愛科普版英語八年級上冊
- 數(shù)字電視調(diào)制器相關(guān)項(xiàng)目投資計(jì)劃書
- 2025年鞋服市場營銷工作計(jì)劃
- 2025幼兒園工作計(jì)劃年度計(jì)劃
- 2025年少先隊(duì)大隊(duì)工作計(jì)劃范文
- 小學(xué)一年級數(shù)學(xué)20以內(nèi)的口算題(可直接打印A4)
- 腫瘤放射治療體位固定技術(shù)
- 監(jiān)理報告范本
- 店鋪交割合同范例
- 新生兒心臟病護(hù)理查房
- 規(guī)劃設(shè)計(jì)行業(yè)數(shù)字化轉(zhuǎn)型趨勢
- 物業(yè)年終總結(jié)匯報工作
- 金色簡約蛇年年終總結(jié)匯報模板
- 醫(yī)院住院病歷質(zhì)量檢查評分表(評分標(biāo)準(zhǔn))
- 12.1 擁有積極的人生態(tài)度(教學(xué)設(shè)計(jì))2024七年級道德與法治上冊
- 視聽說課程(《走遍美國》)教學(xué)方案
評論
0/150
提交評論