大二上數(shù)據(jù)結(jié)構(gòu)高質(zhì)量c編程指南_第1頁(yè)
大二上數(shù)據(jù)結(jié)構(gòu)高質(zhì)量c編程指南_第2頁(yè)
大二上數(shù)據(jù)結(jié)構(gòu)高質(zhì)量c編程指南_第3頁(yè)
大二上數(shù)據(jù)結(jié)構(gòu)高質(zhì)量c編程指南_第4頁(yè)
大二上數(shù)據(jù)結(jié)構(gòu)高質(zhì)量c編程指南_第5頁(yè)
已閱讀5頁(yè),還剩94頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、高質(zhì)量C+/C 編程指南,v 1.0目 錄前 言5第 1 章 文件結(jié)構(gòu)101.11.21.31.41.5和版本的. 10頭文件的結(jié)構(gòu)11件的結(jié)構(gòu)12頭文件的作用12目錄結(jié)構(gòu)13第 2 章 程序的版式142.12.22.32.42.52.62.72.8空行14代碼行15代碼行內(nèi)的空格16對(duì)齊17長(zhǎng)行拆分18修飾符的位置18注釋19類的版式20第 3 章 命名規(guī)則213.13.23.3共性規(guī)則21簡(jiǎn)單的 WINDOWS 應(yīng)用程序命名規(guī)則22簡(jiǎn)單的 UNIX 應(yīng)用程序命名規(guī)則24第 4 章 表和基本語(yǔ)句254.14.2運(yùn)算符的優(yōu)先級(jí)25復(fù)合表264.3 IF 語(yǔ)句264.4 循環(huán)語(yǔ)句的效率284.5

2、 FOR 語(yǔ)句的循環(huán)變量294.6 SWITCH 語(yǔ)句294.7 GOTO 語(yǔ)句30第 5 章. 325.1 為什么需要. 325.2 CONST 與 #DEFINE 的比較325.35.4定義規(guī)則32類中的33第 6 章 函數(shù)設(shè)計(jì)352001Page 2 of 100高質(zhì)量C+/C 編程指南,v 1.06.16.26.36.46.56.6參數(shù)的規(guī)則35返回值的規(guī)則36函數(shù)內(nèi)部實(shí)現(xiàn)的規(guī)則38其它建議39使用斷言40與指針的比較41第 7 章 內(nèi)存管理437.1 內(nèi)存分配方式437.2 常見(jiàn)的內(nèi)存錯(cuò)誤及其對(duì)策437.3 指針與數(shù)組的對(duì)比447.4 指針參數(shù)是如何傳遞內(nèi)存的?467.5 FREE

3、和 DELETE 把指針怎么啦?497.67.77.87.9動(dòng)態(tài)內(nèi)存會(huì)被自動(dòng)嗎?49杜絕“野指針”50有了 MALLOC/FREE 為什么還要 NEW/DELETE ?51內(nèi)存耗盡怎么辦?527.10 MALLOC/FREE 的使用要點(diǎn)537.11 NEW/DELETE 的使用要點(diǎn)547.12 一些心得體會(huì)55第 8 章 C+函數(shù)的高級(jí)特性568.18.28.38.48.58.6函數(shù)重載的概念56成員函數(shù)的重載、覆蓋與隱藏59參數(shù)的缺省值62運(yùn)算符重載63函數(shù)內(nèi)聯(lián)64一些心得體會(huì)67第 9 章 類的構(gòu)造函數(shù)、析構(gòu)函數(shù)與賦值函數(shù)689.19.29.39.49.59.69.79.89.9構(gòu)造函數(shù)與

4、析構(gòu)函數(shù)的. 68構(gòu)造函數(shù)的初始化表69構(gòu)造和析構(gòu)的次序71示例:類 STRING 的構(gòu)造函數(shù)與析構(gòu)函數(shù)71不要輕視拷貝構(gòu)造函數(shù)與賦值函數(shù)72示例:類 STRING 的拷貝構(gòu)造函數(shù)與賦值函數(shù)73偷懶的辦法處理拷貝構(gòu)造函數(shù)與賦值函數(shù)74如何在派生類中實(shí)現(xiàn)類的基本函數(shù)75一些心得體會(huì)76第 10 章 類的繼承與組合772001Page 3 of 100高質(zhì)量C+/C 編程指南,v 1.010.1 繼承7710.2 組合79第 11 章 其它編程經(jīng)驗(yàn)8111.1 使用 CONST 提高函數(shù)的健壯性8111.2 提高程序的效率8311.3 一些有益的建議84參考文獻(xiàn)86附錄 A:C+/C 代碼表87附

5、錄 B:C+/C 試題92附錄 C:C+/C 試題的與評(píng)分標(biāo)準(zhǔn)962001Page 4 of 100高質(zhì)量C+/C 編程指南,v 1.0前 言質(zhì)量是被大多數(shù)程序員掛在嘴上而不是放在心上的東西!除了完全外行和真正的編程高手外,初讀本書(shū),你最先的感受將是驚慌:“哇!我以前捏造的 C+/C 程序怎么會(huì)有那么多的毛???”別難過(guò),作者只不過(guò)比你早幾年、多幾次驚慌而已。請(qǐng)花一兩個(gè)小時(shí)認(rèn)真閱讀這本百頁(yè)經(jīng)書(shū),你將會(huì)獲益匪淺,這是前面 N-1 個(gè)讀者的建議。一、編程老手與高手的誤區(qū)自從計(jì)算機(jī)問(wèn)世以來(lái),程序設(shè)計(jì)就成了令人羨慕的職業(yè),程序員在受人寵愛(ài)之后容易發(fā)展成為毛病特多卻常能自我臭美的群體。如今在 Intern

6、et 上流傳的“真正”的程序員據(jù)說(shuō)是這樣的:(1)真正的程序員沒(méi)有進(jìn)度表,只有討好提心吊膽。真正的程序員不寫(xiě)使用說(shuō)明書(shū),用戶應(yīng)當(dāng)?shù)鸟R屁精才有進(jìn)度表,真正的程序員會(huì)讓(2)(3)(4)(5)(6)(7)(8)(9)去猜想程序的功能。真正的程序員幾乎不寫(xiě)代碼的注釋,如果注釋很難寫(xiě),它理所當(dāng)然也很難讀。真正的程序員不畫(huà)流程圖,原始人和文盲才會(huì)干這事。真正的程序員不看參考手冊(cè),新手和膽小鬼才會(huì)看。真正的程序員不寫(xiě)文檔也不需要文檔,只有看不懂程序的笨蛋才用文檔。真正的程序員認(rèn)為比用戶更明白用戶需要什么。真正的程序員不接受團(tuán)隊(duì)開(kāi)發(fā)的理念,除非他是頭頭。真正的程序員的程序30 小時(shí)的調(diào)試改錯(cuò)。在第一次就正確

7、運(yùn)行,但是他們?cè)敢馐刂M(jìn)行若干個(gè)(10) 真正的程序員在上午 9:00 到下午 5:00 之間工作,如果你看到他在上午 9:00 工作,這表明他從昨晚一直干到現(xiàn)在。具備上述特征越多,越顯得水平高,資格老。所以別奇怪,程序員的很多缺點(diǎn)竟然可以被當(dāng)作優(yōu)點(diǎn)來(lái)欣賞。就象在武俠小說(shuō)中,那些、不受約束且?guī)c(diǎn)邪氣的高手最令人。我曾經(jīng)也這樣信奉,并且希望成為那樣的“真正”的程序員,結(jié)果沒(méi)有得到好下場(chǎng)。我從讀大學(xué)到博士畢業(yè)十年來(lái)一直勤奮好學(xué),累計(jì)編寫(xiě)了數(shù)十萬(wàn)行 C+/C 代碼。有這樣的苦勞和疲勞,我應(yīng)該稱得上是編程老手了吧?我開(kāi)發(fā)的都與科研相關(guān)(集成電路 CAD 和 3D 圖形學(xué)領(lǐng)域),動(dòng)輒數(shù)萬(wàn)行程序,技術(shù)復(fù)雜

8、,難度頗高。這些頻頻獲獎(jiǎng),有一個(gè)獲得首屆學(xué)生電腦大賽軟2001Page 5 of 100高質(zhì)量C+/C 編程指南,v 1.0件展示一等獎(jiǎng)。在 1995 年開(kāi)發(fā)的一套圖形績(jī)”,可以說(shuō)明我算得上是編程高手了吧?可惜這種個(gè)人感覺(jué)不等于事實(shí)。庫(kù)到 2000 年還有人買(mǎi)。羅列出這些“業(yè)讀博期間我曾用一年時(shí)間開(kāi)發(fā)了一個(gè)近 10 萬(wàn)行 C+代碼的 3D 圖形,我內(nèi)心得意表面謙虛地向一位真正的高手請(qǐng)教。他雖然從未涉足過(guò) 3D 圖形領(lǐng)域,卻在幾十分指出該多處設(shè)計(jì)錯(cuò)誤。讓人感覺(jué)那套是用紙糊的華麗衣服,扯一下掉一塊,戳一下破個(gè)洞。我目瞪口呆地這套毫無(wú)實(shí)用價(jià)值,一年的心血白化了,并且害死了的公司。人的頓悟通常發(fā)生在最

9、心痛的時(shí)刻,在沮喪和心痛之后,我作了深刻反省,“面壁”半年,重新溫習(xí)設(shè)計(jì)的基礎(chǔ)知識(shí)。補(bǔ)修“內(nèi)功”之后,又覺(jué)得腰板硬了起來(lái)。博士畢業(yè)前半年,我曾到微軟中國(guó)他讓我寫(xiě)函數(shù) strcpy 的代碼。太容易了吧?錯(cuò)!找工作,接受微軟公司一位資深工程師的面試。這么一個(gè)小不點(diǎn)的函數(shù),他從三個(gè)方面考查:(1) 編程風(fēng)格;(2) 出錯(cuò)處理;(3) 算法復(fù)雜度分析(用于提高性能)。在大學(xué)里從來(lái)沒(méi)有人如此嚴(yán)格地考查過(guò)程序。我化了半個(gè)小時(shí),修改了數(shù)次,他還不盡滿意,讓我回家好好琢磨。我精神抖擻地進(jìn)“考場(chǎng)”,大汗淋漓地出“考場(chǎng)”。這“高手”當(dāng)?shù)靡蔡C囊了。我又好好地反省了一次。我把反省后的心得體會(huì)寫(xiě)成文章放在網(wǎng)上傳閱,引

10、起了不少開(kāi)發(fā)的共鳴。我因此有幸和國(guó)產(chǎn)大型 IT 企業(yè)如、上海、中興等公司的同志們廣泛交流。大家。高質(zhì)量程序設(shè)計(jì)是非常重要的環(huán)認(rèn)為提高質(zhì)量與生產(chǎn)率是工程要解決的節(jié),畢竟是靠編程來(lái)實(shí)現(xiàn)的。我們心目中的老手們和高手們能否編寫(xiě)出高質(zhì)量的不見(jiàn)得都能!?就經(jīng)歷與閱歷來(lái)看,國(guó)內(nèi)大學(xué)的計(jì)算機(jī)教育壓根就沒(méi)有灌輸高質(zhì)量程序設(shè)計(jì)的觀念,教師們和學(xué)生們也很少自覺(jué)關(guān)心的質(zhì)量。勤奮好學(xué)的程序員長(zhǎng)期在低質(zhì)量的中滾爬,吃盡苦頭之后才有一些心得體會(huì),長(zhǎng)進(jìn)極慢,我就是一例?,F(xiàn)在國(guó)內(nèi) IT 企業(yè)擁有學(xué)士、博士文憑的開(kāi)發(fā)比比皆是,但他們?cè)诮邮艽髮W(xué)教育“先天不足”,豈能一到企業(yè)就突然實(shí)現(xiàn)質(zhì)的飛躍。試問(wèn)有多少開(kāi)發(fā)對(duì)正確性、健壯性、可靠性

11、、效率、易用性、可讀性(可理解性)、可擴(kuò)展性、可復(fù)用性、兼容性、可移植性等質(zhì)量屬性了如指掌?并且能在實(shí)踐中運(yùn)用自如??!案哔|(zhì)量”可不是干活點(diǎn)就能實(shí)現(xiàn)的!2001Page 6 of 100高質(zhì)量C+/C 編程指南,v 1.0我們有充分的理由疑慮:(1)編程老手可能會(huì)長(zhǎng)期用隱含錯(cuò)誤的方式編程(習(xí)慣成自然),發(fā)現(xiàn)毛病后都不愿相信的?。?)編程高手可以在某一領(lǐng)域?qū)懗鰳O有水平的代碼,但未必能從全局把握方面面。質(zhì)量的方事實(shí)證明如此。我到上海序員的編程技能,質(zhì)量工作一年來(lái),陸續(xù)面試或測(cè)試過(guò)近百名“新”“老”程大約是 10。很少有人能夠?qū)懗鐾耆腺|(zhì)量要求的 if語(yǔ)句,很多程序員對(duì)指針、內(nèi)存管理一知半解,。們

12、不敢相信這是真的。我做過(guò)現(xiàn)場(chǎng)試驗(yàn):有一次部門(mén)新進(jìn) 14 名生,在開(kāi)歡迎會(huì)之前對(duì)他們進(jìn)行“C+/C 編程技能”摸底回答不難。結(jié)果沒(méi)有一個(gè)人及格,有半數(shù)人得同樣一敗涂地。我問(wèn)大家試題難不難?所有的人都。競(jìng)爭(zhēng)對(duì)手公司的朋友們也做過(guò)試驗(yàn),真的不是我“心狠手辣”或者要求過(guò)高,而是很多高。開(kāi)發(fā)對(duì)的要求不夠要知道、上海、中興等公司的員工素質(zhì)在國(guó)內(nèi) IT 企業(yè)中是比較前列的,倘若他們的編程質(zhì)量都如此差的話,我們?cè)趺锤移谕行」灸贸龈哔|(zhì)量的呢?序都編不好,還談什么振興產(chǎn)業(yè),豈不胡扯。我打算定義編程老手和編程高手,請(qǐng)您別見(jiàn)笑。定義 1:能長(zhǎng)期定義 2:能長(zhǎng)期地編寫(xiě)出高質(zhì)量程序的程序員稱為編程老手。地編寫(xiě)出高難度

13、、高質(zhì)量程序的程序員稱為編程高手。根據(jù)上述定義,馬上得到第一推論:我既不是高手也算不上是老手。在寫(xiě)此書(shū)前,我閱讀了不少程序設(shè)計(jì)方面的英文著作,越看越羞慚。因?yàn)榘l(fā)現(xiàn)連編程基本技能都未能全面掌握,頂多算是二流水平,還好意思談什么老手和高手。希望和我一樣在國(guó)內(nèi)土生土長(zhǎng)的程序員朋友們能夠做到:(1) 知錯(cuò)就改;(2) 經(jīng)常溫故而知新;(3) 堅(jiān)持學(xué)習(xí),天天向上。2001Page 7 of 100高質(zhì)量C+/C 編程指南,v 1.0二、本書(shū)導(dǎo)讀首先請(qǐng)做附錄 B 的 C+/C 試題(不要看),考查的編程質(zhì)量究竟如何。然后參照嚴(yán)格打分。(1)如果你只得了幾十分,請(qǐng)不要聲張,也不要太難過(guò)。編程質(zhì)量差往往是由于

14、不良習(xí)慣造成的,與人的智力、能力沒(méi)有多空間就越大,中國(guó)不就是在落后中趕超發(fā)達(dá),還是有藥可救的。成績(jī)?cè)讲?,可以進(jìn)步的嗎?只要你能下決心改掉不良的編程習(xí)慣,第二次就能及格了。(2)如果你考及格了,表明你的技術(shù)基礎(chǔ)不錯(cuò),希望你能虛心學(xué)習(xí)、不斷進(jìn)步。如果你還沒(méi)有找到合適的工作,不妨到上海試一試。(3) 如果你考出 85 分以上的好成績(jī),你有義務(wù)和資格為你所在的團(tuán)隊(duì)作“C+/C 編程” 培訓(xùn)。希望你能和我們多多交流、相互促進(jìn)。半年前我曾經(jīng)發(fā)現(xiàn)一顆好苗子,就把他挖到我們小組來(lái)。(4) 如果你在沒(méi)有任何提示的情況下考了滿分,希望你能收我做你的徒弟。編程本書(shū)第一結(jié)束后,請(qǐng)閱讀本書(shū)的正文。六章主要論述 C+/C

15、 編程風(fēng)格。難度不高,但是細(xì)節(jié)比較多。別小看了,提高質(zhì)量就是要從這些點(diǎn)點(diǎn)滴滴做起。世上不最好的編程風(fēng)格,一切因需求而定。團(tuán)隊(duì)開(kāi)發(fā)講究風(fēng)格一致,如果制定了大家認(rèn)可的編程風(fēng)格,那么所有組員都要遵守。如果讀者覺(jué)得本書(shū)的編程風(fēng)格比較合你的工作,那么就采用它,不要只看不做。人在小時(shí)候說(shuō)話發(fā)音,寫(xiě)字潦草,如果不改正,總有后悔的時(shí)候。編程也是同樣道理。第七十一章是專題論述,技術(shù)難度比較高,看書(shū)時(shí)要積極思考。特別是第七章“內(nèi)存管理”,讀了并不表示懂了,懂了并不表示就能正確使用。有一位同事看了第七章后覺(jué)得“野指針”寫(xiě)得不錯(cuò),與我切磋了一把。過(guò)了兩周,他告訴我,他忙了兩天追查出一個(gè) Bug,想不到又是“野指針”出

16、,只好重讀第七章。光看本書(shū)對(duì)提高編程質(zhì)量是有限的,建議大家閱讀本書(shū)的參考文獻(xiàn),那些都是經(jīng)典名著。如果你的編程質(zhì)量已經(jīng)過(guò)關(guān)了,不要就此滿足。如果你想成為優(yōu)秀的開(kāi)發(fā),建議你閱讀并按照 CMMI 規(guī)范做事,讓的綜合水平上升一個(gè)臺(tái)階。上海的員工可以向應(yīng)用事業(yè)部工程研究小組索取 CMMI 有關(guān)資料,最好能參加培訓(xùn)。2001Page 8 of 100高質(zhì)量C+/C 編程指南,v 1.0三、本書(shū)的大部分內(nèi)容取材于作者一年前的書(shū)籍手稿(尚未應(yīng)用事業(yè)部的一個(gè)規(guī)范化文件,同時(shí)作為培訓(xùn)),現(xiàn)整理匯編成為上海。由于 C+/C 編程是眾所周知的技術(shù),沒(méi)有可言。編程的好經(jīng)驗(yàn)應(yīng)該大家共享,我們也是這么學(xué)來(lái)的。作者愿意公如下

17、:的電子文檔。(1)讀者可以任意拷貝、修改本書(shū)的內(nèi)容,但不可以篡改作者及所屬。(2)作者,不得或大量本書(shū)。公開(kāi)使用,以免發(fā)生糾紛。(3)如果競(jìng)爭(zhēng)對(duì)手公司的員工得到本書(shū),預(yù)計(jì)到 2002 年 7 月,建立切合中國(guó)國(guó)情的 CMMI 3 級(jí)解決方案。屆時(shí),本書(shū)在內(nèi)的約 1000 頁(yè)規(guī)范將嚴(yán)格受控。歡迎讀者對(duì)本書(shū)提出批評(píng)建議。林銳,2001 年 7 月2001Page 9 of 100高質(zhì)量C+/C 編程指南,v 1.0第 1 章 文件結(jié)構(gòu)每個(gè) C+/C 程序通常分為兩個(gè)文件。一個(gè)文件用于保存程序的( declaration),稱為頭文件。另一個(gè)文件用于保存程序的實(shí)現(xiàn)(implementation),

18、稱為定義(definition)文件。C+/C 程序的頭文件以“.h”為后綴,C 程序的件以“.c”為后綴,C+程序的件通常以“.cpp”為后綴(也有一些系統(tǒng)以“.cc”或“.cxx”為后綴)。1.1和版本的件的開(kāi)頭(參見(jiàn)示例 1-1),主要內(nèi)容有:和版本的信息。位于頭文件和(1)(2) 文件名稱,標(biāo)識(shí)符,摘要。(3) 當(dāng)前版本號(hào),作者/修改者,完成日期。(4) 版本歷史信息。示例1-1和版本的2001Page 10 of 100/* Copyright (c) 2001,上海應(yīng)用事業(yè)部*s.* 文件名稱:filename.h* 文件標(biāo)識(shí):見(jiàn)配置管理計(jì)劃書(shū)* 摘要:簡(jiǎn)要描述本文件的內(nèi)容* 當(dāng)前

19、版本:1.1* 作者:輸入作者(或修改者)名字* 完成日期:2001年7月20日* 取代版本:1.0* 原作者 :輸入原作者(或修改者)名字* 完成日期:2001年5月10日*/高質(zhì)量C+/C 編程指南,v 1.01.2 頭文件的結(jié)構(gòu)頭文件由三部分內(nèi)容組成:(1) 頭文件開(kāi)頭處的和版本(2) 預(yù)處理塊。(3) 函數(shù)和類結(jié)構(gòu)等。(參見(jiàn)示例 1-1)。假設(shè)頭文件名稱為 graphics.h,頭文件的結(jié)構(gòu)參見(jiàn)示例 1-2。l【規(guī)則 1-2-1】為了防止頭文件被重復(fù)理塊。【規(guī)則 1-2-2】用 #include <filename.h>標(biāo)準(zhǔn)庫(kù)目錄開(kāi)始搜索)?!疽?guī)則 1-2-3】用 #inc

20、lude “filename.h”從用戶的工作目錄開(kāi)始搜索)。,應(yīng)當(dāng)用 ifndef/define/endif 結(jié)構(gòu)產(chǎn)生預(yù)處l格式來(lái)標(biāo)準(zhǔn)庫(kù)的頭文件(編譯器將從l格式來(lái)非標(biāo)準(zhǔn)庫(kù)的頭文件(編譯器將²【建議 1-2-1】頭文件中只存放“”而不存放“定義”在 C+ 語(yǔ)法中,類的成員函數(shù)可以在的同時(shí)被定義,并且自動(dòng)成為內(nèi)聯(lián)函數(shù)。這雖然會(huì)帶來(lái)書(shū)寫(xiě)上的方便,但卻造成了風(fēng)格不一致,弊大于利。建議將成員函數(shù)的定義與,不論該函數(shù)體有多么小。²【建議 1-2-2】不提倡使用全局變量,盡量不要在頭文件中出現(xiàn)象 extern int value這類。示例 1-2 C+/C 頭文件的結(jié)構(gòu)2001Pag

21、e 11 of100/和版本見(jiàn)示例 1-1,此處省略。#ifndefGRAPHICS_H / 防止 graphics.h 被重復(fù)#defineGRAPHICS_H#include <math.h>/標(biāo)準(zhǔn)庫(kù)的頭文件#include “myheader.h”/非標(biāo)準(zhǔn)庫(kù)的頭文件void Function1(); / 全局函數(shù)class Box/ 類結(jié)構(gòu);#endif高質(zhì)量C+/C 編程指南,v 1.01.3件的結(jié)構(gòu)件有三部分內(nèi)容:件開(kāi)頭處的(1)(2)(3)和版本(參見(jiàn)示例 1-1)。對(duì)一些頭文件的程序的實(shí)現(xiàn)體(。數(shù)據(jù)和代碼)。graphics.cpp,件的結(jié)構(gòu)參見(jiàn)示例 1-3。假設(shè)件的

22、名稱為示例 1-3 C+/C件的結(jié)構(gòu)1.4 頭文件的作用早期的編程語(yǔ)言如 Basic、Fortran 沒(méi)有頭文件的概念,C+/C 語(yǔ)言的初學(xué)者雖然會(huì)用使用頭文件,但常常不。這里對(duì)頭文件的作用略作解釋:(1)通過(guò)頭文件來(lái)調(diào)用庫(kù)功能。在很多場(chǎng)合,源代碼不便(或)向用戶公布,只要向用戶提供頭文件和二進(jìn)制的庫(kù)即可。用戶只需要按照頭文件中的接口能,而不必關(guān)心接口怎么實(shí)現(xiàn)的。編譯器會(huì)從庫(kù)中提取相應(yīng)的代碼。來(lái)調(diào)用庫(kù)功(2)頭文件能加強(qiáng)類型安全檢查。如果某個(gè)接口被實(shí)現(xiàn)或被使用時(shí),其方式與頭文件中的負(fù)擔(dān)。不一致,編譯器就會(huì)指出錯(cuò)誤,這一簡(jiǎn)單的規(guī)則能大大減輕程序員調(diào)試、改錯(cuò)的2001Page 12 of 100/

23、和版本見(jiàn)示例 1-1,此處省略。#include “graphics.h” /頭文件/ 全局函數(shù)的實(shí)現(xiàn)體void Function1()/ 類成員函數(shù)的實(shí)現(xiàn)體void Box:Draw()高質(zhì)量C+/C 編程指南,v 1.01.5 目錄結(jié)構(gòu)如果一個(gè)的頭文件數(shù)目比較多(如超過(guò)十個(gè)),通常頭文件和件分別保存于不同的目錄,以便于維護(hù)。例如可將頭文件保存于 include 目錄,將目錄)。件保存于 source 目錄(可以是多級(jí)如果某些頭文件是私有的,它被用戶的程序直接,則沒(méi)有必要公開(kāi)其“聲件存放于同一個(gè)目錄。明”。為了加強(qiáng)信息隱藏,這些私有的頭文件可以和2001Page 13 of 100高質(zhì)量C+

24、/C 編程指南,v 1.0第 2 章 程序的版式版式雖然影響程序的功能,但會(huì)影響可讀性。程序的版式追求清晰、美觀,是程序風(fēng)格的重要因素??梢园殉绦虻陌媸奖扔鳛椤皶?shū)法”。好的“書(shū)法”可讓人對(duì)程序一目了然,看得興致勃勃。差的程序“書(shū)法”如螃蟹爬行,讓人看得索然無(wú)味,更令維護(hù)者煩惱有加。請(qǐng)程序員們學(xué)習(xí)程序的“書(shū)法”,彌補(bǔ)大學(xué)計(jì)算機(jī)教育的漏洞,實(shí)在很有必要。2.1 空行空行起著分隔程序段落的作用??招械皿w(不過(guò)多也不過(guò)少)將使程序的布局更加清晰。空行浪費(fèi)內(nèi)存,雖然打印含有空行的程序是會(huì)多消耗一些紙張,但是值得。所以不要舍不得用空行。l【規(guī)則 2-1-1】在每個(gè)類2-1(a)【規(guī)則 2-1-2】在一個(gè)函

25、數(shù)體內(nèi),邏揖上密切相關(guān)的語(yǔ)句之間不加空行,其它地方應(yīng)之后、每個(gè)函數(shù)定義結(jié)束之后都要加空行。參見(jiàn)示例l加空行分隔。參見(jiàn)示例 2-1(b)示例 2-1(a) 函數(shù)之間的空行示例 2-1(b) 函數(shù)內(nèi)部的空行2001Page 14 of 100/ 空行void Function1()/ 空行void Function2()/ 空行void Function3()/ 空行while (condition)statement1;/ 空行if (condition)statement2;elsestatement3;/ 空行statement4;高質(zhì)量C+/C 編程指南,v 1.02.2 代碼行l(wèi)【規(guī)則

26、2-2-1】一行代碼只做一件事情,如只定義一個(gè)變量,或只寫(xiě)一條語(yǔ)句。這樣的代碼容易閱讀,并且方便于寫(xiě)注釋?!疽?guī)則 2-2-2】if、for、while、do 等語(yǔ)句自占一行,執(zhí)行語(yǔ)句不得緊跟其后。不論執(zhí)行語(yǔ)句有多少都要加。這樣可以防止書(shū)寫(xiě)失誤。l示例 2-2(a)為風(fēng)格良好的代碼行,示例 2-2(b)為風(fēng)格不良的代碼行。示例 2-2(a) 風(fēng)格良好的代碼行示例 2-2(b) 風(fēng)格不良的代碼行²【建議 2-2-1】盡可能在定義變量的同時(shí)初始化該變量(就近原則)如果變量的處和其定義處相隔比較遠(yuǎn),變量的初始化很容易被忘記。如果了未被初始化的變量,可能會(huì)導(dǎo)致程序錯(cuò)誤。本建議可以減少隱患。例如

27、int width = 10;int height = 10; int depth = 10;/定義并初紿化 width定義并初紿化 height定義并初紿化 depth2001Page 15 of 100int width;/ 寬度int height; / 高度int depth;/ 深度int width, height, depth; / 寬度高度深度x = a + b;y = c + d; z = e + f;X a + b;y = c + d; z = e + f;if (width < height)dosomething();if (width < height)

28、dosomething();for (initialization; condition; update)dosomething();/ 空行other();for (initialization; condition; update) dosomething();other();高質(zhì)量C+/C 編程指南,v 1.02.3 代碼行內(nèi)的空格l【規(guī)則 2-3-1】之后要。象 const、virtual、inline、case。象 if、for、while 等。,緊跟左括號(hào)(,以與等之后至少要留一個(gè)空格,否則無(wú)法辨析空格再跟左括號(hào)(,以突出【規(guī)則 2-3-2】函數(shù)名之后不要之后應(yīng)留一個(gè)lll區(qū)別?!?/p>

29、規(guī)則 2-3-3】(緊跟,)、,、;向前緊跟,緊跟處不【規(guī)則 2-3-4】,之后要,如 Function(x, y, z)。如果;不是一行的結(jié)束符號(hào),其后要,如 for (initialization; condition; update)。l【規(guī)則 2-3-5】賦值操作符、比較操作符、算術(shù)操作符、邏輯操作符、位域操作符, 如“=”、“+=” “>=”、“<=”、“+”、“*”、“%”、“&&”、“|”、“<<”,“”等二元操作符的前后應(yīng)當(dāng)加空格。【規(guī)則 2-3-6】一元操作符如“!”、“”、“+”、“-”、“&”(地址運(yùn)算符)等前后不加空格?!?/p>

30、規(guī)則 2-3-7】象“”、“.”、“->”這類操作符前后不加空格。ll²【建議 2-3-1】對(duì)于表比較長(zhǎng)的 for 語(yǔ)句和 if 語(yǔ)句,為了緊湊起見(jiàn)可以適當(dāng)?shù)厝<10; i+)和 if (a<=b) && (c<=d)掉一些空格,如 for(i=0;示例 2-3 代碼行內(nèi)的空格2001Page 16 of 100void Func1(int x, int y, int z);/ 良好的風(fēng)格void Func1 (int x,int y,int z);/ 不良的風(fēng)格if (year >= 2000)/ 良好的風(fēng)格if(year>=2

31、000)/ 不良的風(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 +)/ 過(guò)多的空格x = a < b ? a : b;/ 良好的風(fēng)格x=a<b?a:b;/ 不好的風(fēng)格int *x = &y;/ 良好的風(fēng)格int * x = & y;/ 不良的風(fēng)格array5 = 0;/ 不要寫(xiě)成 array 5 = 0

32、;a- Function();/ 不要寫(xiě)成 a . Function();b- >Function();/ 不要寫(xiě)成 b -> Function();高質(zhì)量C+/C 編程指南,v 1.02.4 對(duì)齊l【規(guī)則 2-4-1】程序的分界符和應(yīng)獨(dú)占一行并且位于同一列,同時(shí)與它們的語(yǔ)句左對(duì)齊。【規(guī)則 2-4-2】 之內(nèi)的代碼塊在右邊數(shù)格處左對(duì)齊。l示例 2-4(a)為風(fēng)格良好的對(duì)齊,示例 2-4(b)為風(fēng)格不良的對(duì)齊。示例 2-4(a) 風(fēng)格良好的對(duì)齊示例 2-4(b) 風(fēng)格不良的對(duì)齊2001Page 17 of 100void Function(int x) / program codev

33、oid Function(int x) / program codeif (condition) / program codeelse / program codeif (condition) / program codeelse / program codefor (initialization; condition; update) / program codefor (initialization; condition; update) / program codeWhile (condition) / program codewhile (condition) / program co

34、de如果出現(xiàn)嵌套的,則使用縮進(jìn)對(duì)齊,如:高質(zhì)量C+/C 編程指南,v 1.02.5 長(zhǎng)行拆分l【規(guī)則 2-5-1】代碼行最大長(zhǎng)度宜則眼睛看不過(guò)來(lái),也不便于打印。在 70 至 80 個(gè)字符以內(nèi)。代碼行不要過(guò)長(zhǎng),否l【規(guī)則 2-5-2】長(zhǎng)表要在低優(yōu)先級(jí)操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語(yǔ)句可讀。示例 2-5 長(zhǎng)行的拆分2.6 修飾符的位置修飾符 * 和 應(yīng)該靠近數(shù)據(jù)類型還是該靠近變量名,是個(gè)有爭(zhēng)議的活題。若將修飾符 * 靠近數(shù)據(jù)類型,例如:int* x; 從語(yǔ)義上講此寫(xiě)法比較直觀,即是 int 類型的指針。x上述寫(xiě)法的弊端是容易引起

35、誤解,例如:int* x, y; 此處 y 容易被誤解為指針變量。雖然將 x 和 y 分行定義可以避免誤解,但并不是人人都愿意這樣做。l【規(guī)則 2-6-1】應(yīng)當(dāng)將修飾符 * 和例如: 緊靠變量名charint*name;*x, y;/ 此處 y被誤解為指針2001Page 18 of 100if (very_longer_variable1 >= very_longer_variable12) && (very_longer_variable3 <= very_longer_variable14)&& (very_longer_variable5 &

36、lt;= very_longer_variable16)dosomething();virtual CMatrix CMultiplyMatrix (CMatrix leftMatrix,CMatrix rightMatrix);for (very_longer_initialization; very_longer_condition; very_longer_update)dosomething();高質(zhì)量C+/C 編程指南,v 1.02.7 注釋C 語(yǔ)言的注釋“/*/”。C+語(yǔ)言中,程序塊的注釋常采用“/*/”,行注釋一般采用“/”。注釋通常用于:(1) 版本、(2) 函數(shù)接口說(shuō)明;(3

37、) 重要的代碼行或段落提示。雖然注釋有助于理解代碼,但注意不可過(guò)多地使用注釋。參見(jiàn)示例 2-6。;l【規(guī)則 2-7-1】注釋是對(duì)代碼的“提示”,而不是文檔。注釋太多了會(huì)讓人眼花繚亂。注釋的花樣要少。的注釋不可喧賓奪主,l【規(guī)則 2-7-2】如果代碼本來(lái)就是清楚的,則不必加注釋。否則多此一舉,令人厭煩。例如i+;/ i 加 1,多余的注釋l【規(guī)則 2-7-3】邊寫(xiě)代碼邊注釋,修改代碼同時(shí)修改相應(yīng)的注釋,以保證注釋與代碼的一致性。不再有用的注釋要?jiǎng)h除?!疽?guī)則 2-7-4】注釋?xiě)?yīng)當(dāng)準(zhǔn)確、易懂,防止注釋有二義性。錯(cuò)誤的注釋不但無(wú)益反而有害?!疽?guī)則 2-7-5】盡量避免在注釋中使用縮寫(xiě),特別是不常用縮寫(xiě)

38、。【規(guī)則 2-7-6】注釋的位置應(yīng)與被描述的代碼相鄰,可以放在代碼的上方或右方,不可放在下方?!疽?guī)則 2-7-8】當(dāng)代碼比較長(zhǎng),特別是有多重嵌套時(shí),應(yīng)當(dāng)在一些段落的結(jié)束處加注釋,便于閱讀。llll示例 2-6 程序的注釋2001Page 19 of 100/* 函數(shù):* 輸入?yún)?shù):* 輸出參數(shù):* 返回值 :*/void Function(float x, float y, float z)if ()while () / end of while / end of if高質(zhì)量C+/C 編程指南,v 1.02.8 類的版式類可以將數(shù)據(jù)和函數(shù)封裝在一起,其中函數(shù)表示了類的行為(或稱服務(wù))。類提供關(guān)

39、鍵字 public、protected 和 private,分別用于哪些數(shù)據(jù)和函數(shù)是公有的、受保護(hù)的或者是私有的。這樣可以達(dá)到信息隱藏的目的,即讓類僅僅公開(kāi)必須要讓外界知道的內(nèi)容,而隱藏其它一切內(nèi)容。我們不可以往里扔。類的版式主要有兩種方式:類的封裝功能,不要把它當(dāng)成火鍋,什么東西都(1) 將 private 類型的數(shù)據(jù)寫(xiě)在前面,而將 public 類型的函數(shù)寫(xiě)在后面,如示例 8-3(a)。采用這種版式的程序員主張類的設(shè)計(jì)“以數(shù)據(jù)為中心”,重點(diǎn)關(guān)注類的內(nèi)部結(jié)構(gòu)。(2) 將 public 類型的函數(shù)寫(xiě)在前面,而將 private 類型的數(shù)據(jù)寫(xiě)在后面,如示例 8.3(b) 采用這種版式的程序員主張

40、類的設(shè)計(jì)“以行為為中心”,重點(diǎn)關(guān)注的是類應(yīng)該提供什么樣的接口(或服務(wù))。很多 C+教課書(shū)受到 Biarne Stroustrup 第一本著作的影響,不知不覺(jué)地采用了“以數(shù)據(jù)為中心”的書(shū)寫(xiě)方式,并不見(jiàn)得有多少道理。我建議讀者采用“以行為為中心”的書(shū)寫(xiě)方式,即首先考慮類應(yīng)該提供什么樣的函數(shù)。這是很多人的經(jīng)驗(yàn)“這樣做不僅讓在設(shè)計(jì)類時(shí)思路清晰,而且方便別人閱讀。因?yàn)橛脩糇铌P(guān)心的是接口,誰(shuí)愿意先看到一堆私有數(shù)據(jù)成員!”示例 8.3(a) 以數(shù)據(jù)為中心版式示例 8.3(b) 以行為為中心的版式2001Page 20 of 100class Aprivate:inti, j; float x, y;publ

41、ic:void Func1(void); void Func2(void);class Apublic:void Func1(void); void Func2(void);private:inti, j; float x, y;高質(zhì)量C+/C 編程指南,v 1.0第 3 章 命名規(guī)則比較著名名規(guī)則當(dāng)推 Microsoft 公司的“匈牙利”法,該命名規(guī)則的主要思想是“在變量和函數(shù)名中加入前綴以增進(jìn)人們對(duì)程序的理解”。例如所有的字符變量均以 ch 為前綴,若是指針變量則追加前綴 p。如果一個(gè)變量由 ppch 開(kāi)頭,則表明它是指向字符指針的指針?!靶傺览狈ㄗ畲蟮娜秉c(diǎn)是煩瑣,例如inti, j,

42、k; float x, y, z;倘若采用“匈牙利”命名規(guī)則,則應(yīng)當(dāng)寫(xiě)成int float如此煩瑣的iI,fX,iJ, ik; / 前綴fY, fZ; / 前綴讓絕大多數(shù)程序員i 表示 int 類型f 表示 float 類型受。據(jù),沒(méi)有一種命名規(guī)則可以讓所有的程序員贊同,程序設(shè)計(jì)教科書(shū)一般都不指定命名規(guī)則。命名規(guī)則對(duì)而言并不是“成敗悠關(guān)”的事,我們不要化太多精力試圖發(fā)明世界上最好名規(guī)則,而應(yīng)當(dāng)制定一種令大多數(shù)項(xiàng)目成員滿意并在項(xiàng)目中貫徹實(shí)施。名規(guī)則,3.1 共性規(guī)則本節(jié)論述的共性規(guī)則是被大多數(shù)程序員采納的,我們應(yīng)當(dāng)在遵循這些共性規(guī)則的前提下,再擴(kuò)充特定的規(guī)則,如 3.2 節(jié)。l【規(guī)則 3-1-1

43、】標(biāo)識(shí)符應(yīng)當(dāng)直觀且可以拼讀,可望,不必進(jìn)行“”。標(biāo)識(shí)符最好采用英文單詞或其組合,便于記憶和閱讀。切忌使用漢語(yǔ)拼音來(lái)命名。的英文單詞一般NowValue。太復(fù)雜, 用詞應(yīng)當(dāng)準(zhǔn)確。例如不要把 CurrentValue 寫(xiě)成l【規(guī)則 3-1-2】標(biāo)識(shí)符的長(zhǎng)度應(yīng)當(dāng)符合“min-length && max-information”原則。幾十年前老 ANSI C 規(guī)定名字超過(guò) 6 個(gè)字符,現(xiàn)今的 C+/C 不再有此限制。一般來(lái)說(shuō),長(zhǎng)名字能更好地表達(dá)含義,所以函數(shù)名、變量名、類名長(zhǎng)達(dá)十幾個(gè)字符不足為怪。那么名字是否越長(zhǎng)約好?不見(jiàn)得! 例如變量名 maxval 就比 maxValueUntil

44、Overflow 好用。單字符的名字也是有用的,常見(jiàn)的如 i,j,k,m,n,x,y,z 等,它們通??捎米骱瘮?shù)內(nèi)的局部變量。l【規(guī)則 3-1-3】命名規(guī)則盡量與所采用的操作系統(tǒng)或開(kāi)發(fā)工具的風(fēng)格保持一致。例如 Windows 應(yīng)用程序的標(biāo)識(shí)符通常采用“大小寫(xiě)”混排的方式,如 AddChild。而Unix 應(yīng)用程序的標(biāo)識(shí)符通常采用“小寫(xiě)加下劃線”的方式,如 add_child。別把這兩類風(fēng)2001Page 21 of 100高質(zhì)量C+/C 編程指南,v 1.0格混在一起用。l【規(guī)則 3-1-4】例如:不要出現(xiàn)僅靠大小寫(xiě)區(qū)分的相似的標(biāo)識(shí)符。int voidvoidx, X;foo(int x);

45、FOO(float x);/ 變量 x 與 X 容易/ 函數(shù) foo 與 FOO 容易l【規(guī)則 3-1-5】作用域不同而不要出現(xiàn)標(biāo)識(shí)符完全相同的局部變量和全局變量,盡管兩者的發(fā)生語(yǔ)法錯(cuò)誤,但會(huì)使人誤解。l【規(guī)則 3-1-6】變量的名字應(yīng)當(dāng)使用“名詞”或者“形容詞名詞”。例如:float floatfloatvalue; oldValue;newValue;l【規(guī)則 3-1-7】全局函數(shù)的名字應(yīng)當(dāng)使用“動(dòng)詞”或者“動(dòng)詞名詞”(動(dòng)賓詞組)。類的成員函數(shù)應(yīng)當(dāng)只使用“動(dòng)詞”,被省略掉的名詞就是對(duì)象本身。例如:DrawBox();box->Draw();/ 全局函數(shù)/ 類的成員函數(shù)l【規(guī)則 3-1

46、-8】用正確的反義詞組命名具有互斥意義的變量或相例如:作的函數(shù)等。intintminValue;maxValue;intintSetValue();GetValue();²【建議 3-1-1】盡量避免名字中出現(xiàn)數(shù)字編號(hào),如 Value1,Value2 等,除非邏輯上的確需要編號(hào)。這是為了防止程序員偷懶,不肯為命名動(dòng)腦筋而導(dǎo)致產(chǎn)生無(wú)意義的名字(因?yàn)橛脭?shù)字編號(hào)最省事)。3.2 簡(jiǎn)單的 Windows 應(yīng)用程序命名規(guī)則作者對(duì)“匈牙利”命名規(guī)則做了合理的簡(jiǎn)化,下述名規(guī)則簡(jiǎn)單易用,比較適合于 Windows 應(yīng)用的開(kāi)發(fā)。2001Page 22 of 100高質(zhì)量C+/C 編程指南,v 1.0l

47、【規(guī)則 3-2-1】類名和函數(shù)名用大寫(xiě)字母開(kāi)頭的單詞組合而成。例如:class class voidvoidNode; LeafNode; Draw(void);SetValue(int/ value); /類名 類名 函數(shù)名函數(shù)名l【規(guī)則 3-2-2】變量和參數(shù)用小寫(xiě)字母開(kāi)頭的單詞組合而成。例如:BOOL flag;int drawMode;l【規(guī)則 3-2-3】例如:const intconst int大寫(xiě)的字母,用下劃線分割單詞。MAX =100;MAX_LENGTH = 100;l【規(guī)則 3-2-4】靜態(tài)變量加前綴 s_(表示 static)。例如:void Init()static

48、int s_initValue; / 靜態(tài)變量l【規(guī)則 3-2-5】如果不得已需要全局變量,則使全局變量加前綴 g_(表示 global)。例如:int g_howManyPeople;int g_howMuchMoney;/ 全局變量/ 全局變量l【規(guī)則 3-2-6】類的數(shù)據(jù)成員加前綴 m_(表示 member),這樣可以避免數(shù)據(jù)成員與成員函數(shù)的參數(shù)同名。例如:void Object:SetValue(int width, int height)m_width = width; m_height = height;2001Page 23 of 100高質(zhì)量C+/C 編程指南,v 1.0l【規(guī)

49、則 3-2-7】為了防止某一庫(kù)中的一些標(biāo)識(shí)符和其它庫(kù)中的,可以為各種標(biāo)識(shí)符加上能反映均以 gl 開(kāi)頭,所有性質(zhì)的前綴。例如三維圖形標(biāo)準(zhǔn) OpenGL 的所有庫(kù)函數(shù)(或宏定義)均以 GL 開(kāi)頭。3.3簡(jiǎn)單的 Unix 應(yīng)用程序命名規(guī)則2001Page 24 of 100高質(zhì)量C+/C 編程指南,v 1.0第 4 章 表和基本語(yǔ)句讀者可能懷疑:連 if、for、while、goto、switch 這樣簡(jiǎn)單的東西也要探討編程風(fēng)格,是不是小題大做?的發(fā)覺(jué)很多程序員用隱含錯(cuò)誤的方式寫(xiě)表的錯(cuò)誤。和基本語(yǔ)句,也犯過(guò)類似表和語(yǔ)句都屬于 C+/C 的短語(yǔ)結(jié)構(gòu)語(yǔ)法。它們看似簡(jiǎn)單,但使用時(shí)隱患比較多。本章歸納了正確

50、使用表和語(yǔ)句的一些規(guī)則與建議。4.1 運(yùn)算符的優(yōu)先級(jí)C+/C 語(yǔ)言的運(yùn)算符有數(shù)十個(gè),運(yùn)算符的優(yōu)先級(jí)與結(jié)合律如表 4-1 所示。注意一元運(yùn)算符+-*的優(yōu)先級(jí)高于對(duì)應(yīng)的二元運(yùn)算符。表 4-1 運(yùn)算符的優(yōu)先級(jí)與結(jié)合律l【規(guī)則 4-1-1】如果代碼行中的運(yùn)算符比較多,用括號(hào)確定表使用默認(rèn)的優(yōu)先級(jí)。的操作順序,避免由于將表 4-1 熟記是比較的,為了防止產(chǎn)生歧義并提高可讀性,應(yīng)當(dāng)用括號(hào)確定表的操作順序。例如:word = (high << 8) | low2001Page 25 of 100優(yōu)先級(jí)運(yùn)算符結(jié)合律從高到低排列( ) ->.從!+-(類型) sizeof+-*&從右至左*/%從+-從<&l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 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ì)用戶上傳內(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論