高質(zhì)量編程規(guī)范課件_第1頁
高質(zhì)量編程規(guī)范課件_第2頁
高質(zhì)量編程規(guī)范課件_第3頁
高質(zhì)量編程規(guī)范課件_第4頁
高質(zhì)量編程規(guī)范課件_第5頁
已閱讀5頁,還剩56頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、高質(zhì)量編程規(guī)范上章回顧上章回顧哈希函數(shù)的構(gòu)造方法有那些哈希表中處理沖突的方法有那些高質(zhì)量編程規(guī)范高質(zhì)量編程規(guī)范高質(zhì)量編程規(guī)范第八章第八章高質(zhì)量編程規(guī)范預(yù)習(xí)檢查預(yù)習(xí)檢查 c語言要經(jīng)歷哪幾個(gè)編譯過程 如何申請鏈表單元,及釋放鏈表單元 實(shí)現(xiàn)單鏈表插入的基本語法 簡述一下快速排序基本理論要點(diǎn)高質(zhì)量編程規(guī)范課程目標(biāo)課程目標(biāo) 本章概述本章概述闡述如何進(jìn)行高質(zhì)量的編程,以及注意事項(xiàng) 本章目標(biāo)本章目標(biāo) 了解高質(zhì)量編程注意的方方面面 從代碼風(fēng)格,算法,方便調(diào)試,性能等。 重點(diǎn)重點(diǎn) 內(nèi)存分配與釋放,懸掛指針高質(zhì)量編程規(guī)范本章結(jié)構(gòu)本章結(jié)構(gòu)程序員的態(tài)度程序員的態(tài)度高質(zhì)量編程規(guī)范高質(zhì)量編程規(guī)范微觀上高質(zhì)量微觀上高質(zhì)量宏

2、觀上高質(zhì)量宏觀上高質(zhì)量高質(zhì)量編程規(guī)范8.1 程序員的態(tài)度程序員的態(tài)度 程序員的弱點(diǎn) 不太愿意測試自己的代碼 不愿意review團(tuán)隊(duì)隊(duì)員的代碼 程序員重點(diǎn) 保證自己的代碼沒有 bug 來 高質(zhì)量編程規(guī)范8.1 程序員的態(tài)度程序員的態(tài)度 程序員自身可以在程序生成的流程 詳細(xì)設(shè)計(jì) 編寫代碼 單元測試 功能測試 代碼 review 高質(zhì)量編程規(guī)范8.1.1 編碼的風(fēng)格編碼的風(fēng)格 版權(quán)和版本的申明 頭文件的結(jié)構(gòu) 定義文件的結(jié)構(gòu) 頭文件的作用 目錄結(jié)構(gòu) 命名規(guī)則 注釋規(guī)則高質(zhì)量編程規(guī)范/* copyright (c) 2001,上海貝爾有限公司網(wǎng)絡(luò)應(yīng)用事業(yè)部上海貝爾有限公司網(wǎng)絡(luò)應(yīng)用事業(yè)部* all rig

3、hts reserved.* * 文件名稱:文件名稱:* 文件標(biāo)識:文件標(biāo)識:見配置管理計(jì)劃書見配置管理計(jì)劃書* * 摘摘 要:要:簡要描述本文件的內(nèi)容簡要描述本文件的內(nèi)容* * * * 當(dāng)前版本:當(dāng)前版本:1.1* 作作 者:者:輸入作者(或修改者)名字輸入作者(或修改者)名字* * 完成日期:完成日期:2001年年7月月20日日* * * 取代版本:取代版本:1.0 * 原作者原作者 :輸入原作者(或修改者)名字輸入原作者(或修改者)名字* * 完成日期:完成日期:2001年年5月月10日日8.1.1.1 版權(quán)和版本的申明版權(quán)和版本的申明 版權(quán)和版本的聲明位于頭文件和定義文件的開頭,主要內(nèi)

4、容有:(1)版權(quán)信息。(2)文件名稱,標(biāo)識符,摘要。(3)當(dāng)前版本號,作者/修改者,完成日期。(4)版本歷史信息。 范例高質(zhì)量編程規(guī)范8.1.1.2頭文件的結(jié)構(gòu)頭文件的結(jié)構(gòu) 頭文件由三部分內(nèi)容組成: 頭文件開頭處的版權(quán)和版本聲明。 預(yù)處理塊。 函數(shù)和類結(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 “” 格式來引用非標(biāo)準(zhǔn)庫的頭文件(編譯器將從用戶的工作目錄開始搜索)。 頭文件中只存放“聲明”而不存放“定義” 不提倡使用全局變量,盡

5、量不要在頭文件中出現(xiàn)象extern int value 這類聲明。高質(zhì)量編程規(guī)范8.1.1.3定義文件的結(jié)構(gòu)定義文件的結(jié)構(gòu) 定義文件有三部分內(nèi)容: 定義文件開頭處的版權(quán)和版本聲明 對一些頭文件的引用 程序的實(shí)現(xiàn)體(包括數(shù)據(jù)和代碼) 范例/ 版權(quán)和版本聲明版權(quán)和版本聲明#include “graphics.h” / 引用頭文件引用頭文件/ 全局函數(shù)的實(shí)現(xiàn)體全局函數(shù)的實(shí)現(xiàn)體void function1()高質(zhì)量編程規(guī)范8.1.1.4 頭文件的作用頭文件的作用 通過頭文件來調(diào)用庫功能 頭文件能加強(qiáng)類型安全檢查高質(zhì)量編程規(guī)范8.1.1.5 目錄結(jié)構(gòu)目錄結(jié)構(gòu) 特點(diǎn): 便于維護(hù) 通常應(yīng)將頭文件和定義文件分

6、別保存于不同的目錄 加強(qiáng)信息隱藏 :如果某些頭文件是私有的,它不會被用戶的程序直接引用,則沒有必要公開其“聲明” 范例: network 工程建立三個(gè)目錄 source:存放工程源文件,如:server.c client.c include:存放工程頭文件,如:server.h client.h lib:存放工程庫文件,如:tipr.so stdio.so高質(zhì)量編程規(guī)范8.1.1.6 命名規(guī)則命名規(guī)則主要思想:在變量和函數(shù)名中加入前綴以增進(jìn)人們對程序的理解具體規(guī)則:標(biāo)識符應(yīng)當(dāng)直觀且可以拼讀,可望文知意,不必進(jìn)行“解碼”。標(biāo)識符的長度應(yīng)當(dāng)符合“min-length & max-infor

7、mation”原則命名規(guī)則盡量與所采用的操作系統(tǒng)或開發(fā)工具的風(fēng)格保持一致程序中不要出現(xiàn)僅靠大小寫區(qū)分的相似的標(biāo)識符程序中不要出現(xiàn)標(biāo)識符完全相同的局部變量和全局變量變量的名字應(yīng)當(dāng)使用“名詞”或者“形容詞名詞”用正確的反義詞組命名具有互斥意義的變量或相反動作的函數(shù)等高質(zhì)量編程規(guī)范8.1.2 程序的版式程序的版式 空行 代碼行 代碼行內(nèi)的空格 代碼對齊 長行拆分 修飾符的位置 注釋高質(zhì)量編程規(guī)范8.1.2.1 空行空行空行起著分隔程序段落的作用??招械皿w(不過多也不過少)將使程序的布局更加清晰??招胁粫速M(fèi)內(nèi)存空行規(guī)則 每個(gè)函數(shù)定義結(jié)束之后都要加空行 在一個(gè)函數(shù)體內(nèi),邏揖上密切相關(guān)的語句之間不加空行

8、,其它地方應(yīng)加空行分隔。高質(zhì)量編程規(guī)范8.1.2.2 代碼行規(guī)則代碼行規(guī)則一行代碼只做一件事情如只定義一個(gè)變量,或只寫一條語句。這樣的代碼容易閱讀,并且方便于寫注釋。if、for、while、do等語句自占一行,執(zhí)行語句不得緊跟其后。不論執(zhí)行語句有多少都要加。盡可能在定義變量的同時(shí)初始化該變量(就近原則)高質(zhì)量編程規(guī)范8.1.2.3 代碼行內(nèi)的空格代碼行內(nèi)的空格 關(guān)鍵字之后要留空格函數(shù)名之后不要留空格,緊跟左括號(,以與關(guān)鍵字區(qū)別(向后緊跟,)、,、;向前緊跟,緊跟處不留空格,之后要留空格二元操作符的前后應(yīng)當(dāng)加空格。一元操作符前后不加空格。象“”、“.”、“-”這類操作符前后不加空格。高質(zhì)量編

9、程規(guī)范8.1.2.4 對齊和拆分規(guī)則對齊和拆分規(guī)則對齊規(guī)則 程序的分界符和應(yīng)獨(dú)占一行并且位于同一列,同時(shí)與引用它們的語句左對齊 之內(nèi)的代碼塊在右邊數(shù)格處左對齊。長行拆分規(guī)則 代碼行最大長度宜控制在70至80個(gè)字符以內(nèi) 長表達(dá)式要在低優(yōu)先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符)。拆分出的新行要進(jìn)行適當(dāng)?shù)目s進(jìn),使排版整齊,語句可讀高質(zhì)量編程規(guī)范8.1.2.5 長行拆分規(guī)則長行拆分規(guī)則 代碼行最大長度宜控制在70至80個(gè)字符以內(nèi) 長表達(dá)式要在低優(yōu)先級操作符處拆分成新行,操作符放在新行之首(以便突出操作符) 例:if (very_longer_variable1 = very_lon

10、ger_variable12)& (very_longer_variable3 = very_longer_variable14)& (very_longer_variable5 = b & c d & c + f = g + h ; 不要有多用途的復(fù)合表達(dá)式 d = (a = b + c) + r ; 不要把程序中的復(fù)合表達(dá)式與“真正的數(shù)學(xué)表達(dá)式”混淆 if (a b c) 與 if (ab) & (b=”或“=-epsinon) & (x=epsinon) 其中epsinon是允許的誤差(即精度)。 高質(zhì)量編程規(guī)范8.2.1.3 if語句語句

11、 指針變量與零值比較指針變量與零值比較 指針變量用“=”或“!=”與null比較 例子:與零值比較的標(biāo)準(zhǔn)與零值比較的標(biāo)準(zhǔn)if語句如下:語句如下:if (p = null)/ p與與null顯式比較,強(qiáng)調(diào)顯式比較,強(qiáng)調(diào)p是指針變量是指針變量if (p != null)不要寫成不要寫成if (p = 0) / 容易讓人誤解容易讓人誤解p是整型變量是整型變量if (p != 0) 或者或者 if (p)/ 容易讓人誤解容易讓人誤解p是布爾變量是布爾變量if (!p)高質(zhì)量編程規(guī)范8.2.1.4 使用使用const提高函數(shù)的健壯性提高函數(shù)的健壯性 const 用法: 定義常量 修飾函數(shù)的參數(shù) 修飾函數(shù)

12、的返回值 修飾函數(shù)的定義體 高質(zhì)量編程規(guī)范8.2.1.4.1 用用const修飾函數(shù)的參數(shù)修飾函數(shù)的參數(shù) const只能修飾輸入?yún)?shù) 特點(diǎn) 如果輸入?yún)?shù)采用“指針傳遞”,那么加const修飾可以防止意外地改動該指針,起到保護(hù)作用 例:void stringcopy(char *strdestination, const char *strsource); 如果輸入?yún)?shù)采用“引用傳遞 ”, 可以避免修改參數(shù)值的值傳遞 void func(const a &a) 高質(zhì)量編程規(guī)范8.2.1.4.2 用用const修飾函數(shù)的返回值修飾函數(shù)的返回值 如果給以“指針傳遞”方式的函數(shù)返回值加cons

13、t修飾,那么函數(shù)返回值(即指針)內(nèi)容不能被修改例如函數(shù)const char * getstring(void);如下語句將出現(xiàn)編譯錯(cuò)誤:char *str = getstring();正確的用法是const char *str = getstring();高質(zhì)量編程規(guī)范8.3.1 防止內(nèi)存泄漏防止內(nèi)存泄漏 內(nèi)存分配方式 malloc/free 的使用要點(diǎn) 常見的內(nèi)存錯(cuò)誤及其對策 引用與指針的比較 指針與數(shù)組的對比 指針參數(shù)是如何傳遞內(nèi)存的 動態(tài)內(nèi)存自動釋放 杜絕“野指針” 高質(zhì)量編程規(guī)范8.3.1.1內(nèi)存分配方式內(nèi)存分配方式 內(nèi)存分配方式有三種: 從靜態(tài)存儲區(qū)域分配 在棧上創(chuàng)建 從堆上分配,亦

14、稱動態(tài)內(nèi)存分配 malloc或new free或delete 高質(zhì)量編程規(guī)范8.3.1.2 malloc/free 的使用要點(diǎn)的使用要點(diǎn) malloc 語法:void * malloc(size_t size); 作用:申請一塊長度為length的整數(shù)類型的內(nèi)存 例子:int *p = (int *) malloc(sizeof(int) * length) free 語法:void free( void * memblock ) 作用:釋放內(nèi)存 例子:free(p)如果p是null指針,那么free對p無論操作多少次都不會出問題如果p不是null指針,那么free對p連續(xù)操作兩次就會導(dǎo)致程序

15、運(yùn)行錯(cuò)誤。高質(zhì)量編程規(guī)范8.3.1.3 常見的內(nèi)存錯(cuò)誤及其對策常見的內(nèi)存錯(cuò)誤及其對策 常見的內(nèi)存錯(cuò)誤 內(nèi)存分配未成功,卻使用了它 內(nèi)存分配雖然成功,但是尚未初始化就引用它 內(nèi)存分配成功并且已經(jīng)初始化,但操作越過了內(nèi)存的邊界 忘記了釋放內(nèi)存,造成內(nèi)存泄露 釋放了內(nèi)存卻繼續(xù)使用它 高質(zhì)量編程規(guī)范8.3.1.3 常見的內(nèi)存錯(cuò)誤及其對策常見的內(nèi)存錯(cuò)誤及其對策 內(nèi)存管理的規(guī)則 用malloc之后,應(yīng)該立即檢查指針值是否為null。防止使用指針值為null的內(nèi)存。不要忘記為數(shù)組和動態(tài)內(nèi)存賦初值。防止將未被初始化的內(nèi)存作為右值使用。避免數(shù)組或指針的下標(biāo)越界,特別要當(dāng)心發(fā)生“多1”或者“少1”操作。動態(tài)內(nèi)存的

16、申請與釋放必須配對,防止內(nèi)存泄漏。用free釋放了內(nèi)存之后,立即將指針設(shè)置為null,防止產(chǎn)生“野指針”。高質(zhì)量編程規(guī)范8.3.1.5 指針與數(shù)組的對比指針與數(shù)組的對比 差別 數(shù)組:要么在靜態(tài)存儲區(qū)被創(chuàng)建(如全局?jǐn)?shù)組),要么在棧上被創(chuàng)建 數(shù)組名對應(yīng)著(而不是指向)一塊內(nèi)存其地址與容量在生命期內(nèi)保持不變只有數(shù)組的內(nèi)容可以改變 指針:隨時(shí)指向任意類型的內(nèi)存塊 動態(tài)生存在數(shù)據(jù)堆高質(zhì)量編程規(guī)范8.3.1.5 指針與數(shù)組的對比指針與數(shù)組的對比 差別 內(nèi)存的容量大小 例:1 例2char a = hello world; char *p = a; sizeof(a) ?/ 12字節(jié)字節(jié) sizeof(p)

17、 ?/ 4字節(jié)字節(jié) void func(char a100) sizeof(a) ? / 4字節(jié)而不是字節(jié)而不是100字節(jié)字節(jié) 高質(zhì)量編程規(guī)范8.3.1.5 指針與數(shù)組的對比指針與數(shù)組的對比 動態(tài)內(nèi)存會自動釋放 不會自動釋放 例:指針應(yīng)該注意的特性 指針消亡了,并不表示它所指的內(nèi)存會被自動釋放。 內(nèi)存被釋放了,并不表示指針會消亡或者成了null指針。void func(void) char *p = (char *) malloc(100); / 動態(tài)內(nèi)存會自動釋放嗎?動態(tài)內(nèi)存會自動釋放嗎? 高質(zhì)量編程規(guī)范8.3.1.6 指針參數(shù)是如何傳遞內(nèi)存的指針參數(shù)是如何傳遞內(nèi)存的* * * *如果函數(shù)的

18、參數(shù)是一個(gè)指針,不要指望用該指針去申請動態(tài)內(nèi)存如果函數(shù)的參數(shù)是一個(gè)指針,不要指望用該指針去申請動態(tài)內(nèi)存 void getmemory(char *p, int num) p = (char *)malloc(sizeof(char) * num); void test(void) char *str = null; getmemory(str, 100); / str 仍然為仍然為 null strcpy(str, hello);/ 運(yùn)行錯(cuò)誤運(yùn)行錯(cuò)誤 高質(zhì)量編程規(guī)范8.3.1.6 指針參數(shù)是如何傳遞內(nèi)存的指針參數(shù)是如何傳遞內(nèi)存的* * * *如果函數(shù)的參數(shù)是一個(gè)指針,不要指望用該指針去申請動態(tài)

19、內(nèi)存如果函數(shù)的參數(shù)是一個(gè)指針,不要指望用該指針去申請動態(tài)內(nèi)存 void getmemory2(char *p, int num) *p = (char *)malloc(sizeof(char) * num); void test(void) char *str = null; getmemory(&str, 100); / str 仍然為仍然為 null strcpy(str, hello);/ 運(yùn)行錯(cuò)誤運(yùn)行錯(cuò)誤 高質(zhì)量編程規(guī)范8.3.1.6 指針參數(shù)是如何傳遞內(nèi)存的指針參數(shù)是如何傳遞內(nèi)存的* * * * 不要用不要用returnreturn語句返回指向語句返回指向“棧內(nèi)存棧內(nèi)存”的

20、指針的指針 char *getstring(void) char p = hello world; return p; / 編譯器將提出警告編譯器將提出警告 void test4(void) char *str = null; str = getstring(); / str 的內(nèi)容是垃圾的內(nèi)容是垃圾 printf(“%sn”,str ); 高質(zhì)量編程規(guī)范8.3.1.7動態(tài)內(nèi)存自動釋放動態(tài)內(nèi)存自動釋放 free函數(shù)特點(diǎn) 釋放指針?biāo)傅膬?nèi)存 沒有銷毀指針,故指針地址仍然不變(非null) 例: char *p = (char *) malloc(100);strcpy(p, “hello”);f

21、ree(p); / p 所指的內(nèi)存被釋放,但是所指的內(nèi)存被釋放,但是p所指的地址仍然不變所指的地址仍然不變if(p != null) strcpy(p, “world”);/ 出錯(cuò)出錯(cuò) 沒有起到?jīng)]有起到防錯(cuò)作用防錯(cuò)作用高質(zhì)量編程規(guī)范8.3.1.8 杜絕杜絕“野指針野指針” 什么是“野指針” 不是null指針 是指向“垃圾”內(nèi)存的指針 if(p!=null)不能起到作用 野指針的成因 指針變量沒有被初始化 指針初始化:char *p = null;char *str = (char *) malloc(100); 指針p被free或者delete之后,沒有置為null 高質(zhì)量編程規(guī)范8.3.2

22、編程的優(yōu)化編程的優(yōu)化 為什么需要常量 const與#define的比較 常量定義規(guī)則 循環(huán)語句的效率 for語句的循環(huán)控制變量高質(zhì)量編程規(guī)范8.3.2.1 為什么用常量為什么用常量常量是一種標(biāo)識符,它的值在運(yùn)行期間恒定不變。用 #define來定義常量(稱為宏常量),還可以用const來定義常量為什么要常量程序的可讀性在程序的很多地方輸入同樣的數(shù)字或字符串,難保不發(fā)生書寫錯(cuò)誤。如果要修改數(shù)字或字符串,則會在很多地方改動,既麻煩又容易出錯(cuò)。盡量使用含義直觀的常量來表示那些將在程序中多次出現(xiàn)的數(shù)字或字符串。例如:#define max 100/* c語言的宏常量 */ const int max

23、= 100;/ c 語言的const常量const float pi = 3.14159;/ c 語言的const常量高質(zhì)量編程規(guī)范8.3.2.2 const 與與 #define的比較的比較 兩種區(qū)別比較const常量有數(shù)據(jù)類型,而宏常量沒有數(shù)據(jù)類型。編譯器可以對前者進(jìn)行類型安全檢查。而對后者只進(jìn)行字符替換,沒有類型安全檢查有些集成化的調(diào)試工具可以對const常量進(jìn)行調(diào)試,但是不能對宏常量進(jìn)行調(diào)試。 常量定義規(guī)則需要對外公開的常量放在頭文件中,不需要對外公開的常量放在定義文件的頭部為便于管理,可以把不同模塊的常量集中存放在一個(gè)公共的頭文件中。如果某一常量與其它常量密切相關(guān),應(yīng)在定義中包含這種

24、關(guān)系,而不應(yīng)給出一些孤立的值。例如:const float radius = 100;const float diameter = radius * 2;高質(zhì)量編程規(guī)范8.3.2.3循環(huán)語句的效率循環(huán)語句的效率在多重循環(huán)中,如果有可能,應(yīng)當(dāng)將最長的循環(huán)放在最內(nèi)層,最短的循環(huán)放在最外層,以減少cpu跨切循環(huán)層的次數(shù)。如果循環(huán)體內(nèi)存在邏輯判斷,并且循環(huán)次數(shù)很大,宜將邏輯判斷移到循環(huán)體的外面。for (row=0; row100; row+)for ( col=0; col5; col+ )sum = sum + arowcol;if (condition) for (i=0; in; i+) do

25、something();else for (i=0; in; i+) dootherthing();高質(zhì)量編程規(guī)范8.3.2.4 for語句的循環(huán)控制變量語句的循環(huán)控制變量 循環(huán)控制變量規(guī)則 不可在for 循環(huán)體內(nèi)修改循環(huán)變量,防止for 循環(huán)失去控制 建議for語句的循環(huán)控制變量的取值采用“半開半閉區(qū)間”寫法 例子: 半開半閉區(qū)間 閉區(qū)間 for (x=0; xn; x+) for (x=0; x=n; x+) ;高質(zhì)量編程規(guī)范8.3.2.5 pragma預(yù)處理預(yù)處理 其格式一般為: #pragma para 其中para 為參數(shù),下面來看一些常用的參數(shù)。 #pragma message 編譯信息輸出窗口中輸出相應(yīng)的信息,這對于源代碼信息的控制是非常重要的。其使用方法為:#pragma message(“消息文本”) #pragma once 只要在頭文件的最開始加入這條指令就能夠保證頭文件被編譯一次,這條指令實(shí)際上在vc6中就已經(jīng)有了,但是考慮到兼容性并沒有太多的使用它。 pragma comment(.) 該指令將一個(gè)注釋記錄放入一個(gè)對象文件或可執(zhí)行文件中。 常用的lib關(guān)鍵字,可以幫我們連入一個(gè)庫文件。高質(zhì)量編程規(guī)范8.3.2.5 pragm

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論