異常(exception)是程序控制中的偶發(fā)事件異_第1頁
異常(exception)是程序控制中的偶發(fā)事件異_第2頁
異常(exception)是程序控制中的偶發(fā)事件異_第3頁
異常(exception)是程序控制中的偶發(fā)事件異_第4頁
異常(exception)是程序控制中的偶發(fā)事件異_第5頁
已閱讀5頁,還剩20頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、C/C+程序設(shè)計(jì)程序設(shè)計(jì)1 異常異常(exception)是程序控制中的偶發(fā)事件。異是程序控制中的偶發(fā)事件。異常的來源分兩種:一種是硬件異常如常的來源分兩種:一種是硬件異常如CPU觸發(fā)的異觸發(fā)的異常,一種是軟件異常。軟件異常是程序設(shè)計(jì)不周操常,一種是軟件異常。軟件異常是程序設(shè)計(jì)不周操作次序不當(dāng)引發(fā)的意外。作次序不當(dāng)引發(fā)的意外。 異常處理就是關(guān)于不期望的事件發(fā)生后進(jìn)行妥異常處理就是關(guān)于不期望的事件發(fā)生后進(jìn)行妥當(dāng)應(yīng)付的方法。當(dāng)應(yīng)付的方法。C+異常處理機(jī)制提供了捕獲各種異常處理機(jī)制提供了捕獲各種數(shù)據(jù)類型不測消息的能力。數(shù)據(jù)類型不測消息的能力。C/C+程序設(shè)計(jì)程序設(shè)計(jì)2C/C+程序設(shè)計(jì)程序設(shè)計(jì)3一、異

2、常處理的概況一、異常處理的概況 程序設(shè)計(jì)中首先是確保代碼正常運(yùn)行,盡量避免錯誤。程序設(shè)計(jì)中首先是確保代碼正常運(yùn)行,盡量避免錯誤。因此在異常處理之前設(shè)置一套防范措施是更重要的編程工因此在異常處理之前設(shè)置一套防范措施是更重要的編程工作。作。C+異常處理并不著眼于錯誤的事先禁止,也無力應(yīng)付異常處理并不著眼于錯誤的事先禁止,也無力應(yīng)付硬件的莫測操作導(dǎo)致的軟件的崩潰。硬件的莫測操作導(dǎo)致的軟件的崩潰。 異常處理的共同焦點(diǎn)是錯誤發(fā)生后如何應(yīng)對,有兩種主異常處理的共同焦點(diǎn)是錯誤發(fā)生后如何應(yīng)對,有兩種主要的風(fēng)格:一種風(fēng)格是在錯誤發(fā)生的現(xiàn)場進(jìn)行清理工作,資要的風(fēng)格:一種風(fēng)格是在錯誤發(fā)生的現(xiàn)場進(jìn)行清理工作,資源的分

3、配和釋放在同一個程序塊中進(jìn)行;另一種作風(fēng)是在低源的分配和釋放在同一個程序塊中進(jìn)行;另一種作風(fēng)是在低層檢查到的錯誤反饋到高層統(tǒng)一處理,低層對應(yīng)被調(diào)函數(shù)的層檢查到的錯誤反饋到高層統(tǒng)一處理,低層對應(yīng)被調(diào)函數(shù)的程序段,高層對應(yīng)主控函數(shù)。總的原則是錯誤及時的捕獲,程序段,高層對應(yīng)主控函數(shù)。總的原則是錯誤及時的捕獲,盡量有效地進(jìn)行錯誤的排除,程序的損失減至最少。盡量有效地進(jìn)行錯誤的排除,程序的損失減至最少。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)4 C+異常處理僅是各種異常處理方法中的一種而已。好異常處理僅是各種異常處理方法中的一種而已。好的容錯性強(qiáng)的程序設(shè)計(jì)是通過簡單的的容錯性強(qiáng)的程序設(shè)計(jì)是通過簡單的ifelse語句

4、、層次分明語句、層次分明的短路邏輯判斷表達(dá)式和方向直接的的短路邏輯判斷表達(dá)式和方向直接的goto語句一起組合實(shí)現(xiàn)語句一起組合實(shí)現(xiàn)的。的。 短路邏輯表達(dá)式負(fù)責(zé)輕重緩急的消息過濾,短路邏輯表達(dá)式負(fù)責(zé)輕重緩急的消息過濾,ifelse語句語句掌管消息的分流,將正常情況的代碼置于掌管消息的分流,將正常情況的代碼置于 if 分支下,異常的分支下,異常的狀況置于狀況置于 else 分支下。分支下。Goto 語句擅長將多層嵌套的內(nèi)層犯語句擅長將多層嵌套的內(nèi)層犯規(guī)直接彈出到一個統(tǒng)一的外層出口,規(guī)直接彈出到一個統(tǒng)一的外層出口,return帶表達(dá)式直接返帶表達(dá)式直接返回更是被調(diào)函數(shù)運(yùn)作成功與否的鮮明標(biāo)志,程序員可以

5、指定回更是被調(diào)函數(shù)運(yùn)作成功與否的鮮明標(biāo)志,程序員可以指定返回數(shù)值的實(shí)際語義。返回數(shù)值的實(shí)際語義。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)5 C+異常處理相對于早已有之的容錯處理進(jìn)行了如何的異常處理相對于早已有之的容錯處理進(jìn)行了如何的提煉和拔高呢?提煉和拔高呢? 首先該機(jī)制平和地過渡了被調(diào)函數(shù)和主控函數(shù)之間的界首先該機(jī)制平和地過渡了被調(diào)函數(shù)和主控函數(shù)之間的界限,錯誤可以在低層及時清理也可以到高層收拾,這樣低層限,錯誤可以在低層及時清理也可以到高層收拾,這樣低層的錯誤信息可以越過函數(shù)調(diào)用的分界向上引渡到主控函數(shù),的錯誤信息可以越過函數(shù)調(diào)用的分界向上引渡到主控函數(shù),直接主控函數(shù)不處理,間接的主控函數(shù)則予以過問,或

6、最終直接主控函數(shù)不處理,間接的主控函數(shù)則予以過問,或最終輸送到輸送到main函數(shù)。函數(shù)。 其次引進(jìn)一組相關(guān)的語句專門處理異常,這樣程序的分其次引進(jìn)一組相關(guān)的語句專門處理異常,這樣程序的分工就顯得井然有序。工就顯得井然有序。 這一組專門實(shí)施異常處理的語句是關(guān)于結(jié)構(gòu)化異常處這一組專門實(shí)施異常處理的語句是關(guān)于結(jié)構(gòu)化異常處理、理、ifelse、堆棧動態(tài)跟蹤等復(fù)雜技術(shù)的綜合和抽象。、堆棧動態(tài)跟蹤等復(fù)雜技術(shù)的綜合和抽象。C/C+程序設(shè)計(jì)程序設(shè)計(jì)6二、二、C+異常處理的途徑異常處理的途徑 C+提供了一個平行于或超然于函數(shù)調(diào)用鏈的異常處理提供了一個平行于或超然于函數(shù)調(diào)用鏈的異常處理上下環(huán)境,這個異常處理環(huán)境目

7、前尚不夠應(yīng)對低層的硬件偶上下環(huán)境,這個異常處理環(huán)境目前尚不夠應(yīng)對低層的硬件偶發(fā)錯誤,因此發(fā)錯誤,因此C+異常處理適宜于高級程序員恰當(dāng)撫平程序異常處理適宜于高級程序員恰當(dāng)撫平程序邏輯中暗伏的漏洞。邏輯中暗伏的漏洞。 關(guān)鍵字關(guān)鍵字try、catch和和throw就是對異常進(jìn)行處理的。該就是對異常進(jìn)行處理的。該異常處理的優(yōu)點(diǎn)在于對不測錯誤的攔截可在程序的任何地方異常處理的優(yōu)點(diǎn)在于對不測錯誤的攔截可在程序的任何地方做出響應(yīng),可以集中排放錯誤處理代碼也可以隨處布點(diǎn)跟蹤做出響應(yīng),可以集中排放錯誤處理代碼也可以隨處布點(diǎn)跟蹤同時尚可以一層一層地向上拋出。同時尚可以一層一層地向上拋出。C/C+程序設(shè)計(jì)程序設(shè)計(jì)7

8、下面先介紹三個關(guān)鍵字的含義:下面先介紹三個關(guān)鍵字的含義: 1. try 內(nèi)嵌內(nèi)嵌throw語句的語句序列;語句的語句序列; 2. throw type_expre;throw; 3. catch ( type expre ) 匹配匹配throw 拋出的拋出的type_expre 的語句塊的語句塊; catch (.) 匹配任意類型的語句塊匹配任意類型的語句塊; 關(guān)鍵字關(guān)鍵字try緊跟一對花括號包含的語句塊,稱為緊跟一對花括號包含的語句塊,稱為try塊。塊。 try塊中的序列語句包含直接的或間接的塊中的序列語句包含直接的或間接的throw語句,這語句,這些些throw語句潛在的描向一個同級的語句

9、潛在的描向一個同級的catch的入口,因此觸的入口,因此觸發(fā)發(fā)catch塊起作用。其中塊起作用。其中type表示已經(jīng)聲明的類型,如表示已經(jīng)聲明的類型,如float,long以及結(jié)構(gòu)名等。以及結(jié)構(gòu)名等。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)8 關(guān)鍵字關(guān)鍵字throw 跟隨一個表達(dá)式語句,其后的表達(dá)式等價跟隨一個表達(dá)式語句,其后的表達(dá)式等價于于return所要求的操作數(shù),其作用也類似于所要求的操作數(shù),其作用也類似于return的返回轉(zhuǎn)的返回轉(zhuǎn)向作用。可以說帶表達(dá)式的向作用??梢哉f帶表達(dá)式的throw語句是語句是return語句和語句和goto標(biāo)號語句的融合。標(biāo)號語句的融合。return將控制權(quán)返回給主控函數(shù),

10、將控制權(quán)返回給主控函數(shù),goto將將流程直接轉(zhuǎn)移到指定的標(biāo)號處但跳轉(zhuǎn)由內(nèi)向外地限于一個函流程直接轉(zhuǎn)移到指定的標(biāo)號處但跳轉(zhuǎn)由內(nèi)向外地限于一個函數(shù)體內(nèi);數(shù)體內(nèi);throw可以遠(yuǎn)程拋射,流程從拋設(shè)點(diǎn)暗攜可以遠(yuǎn)程拋射,流程從拋設(shè)點(diǎn)暗攜return的的控制撤離機(jī)制,直奔所在控制撤離機(jī)制,直奔所在try塊后的塊后的catch塊的單參入口。塊的單參入口。 throw也可近處投擲異常,相當(dāng)于也可近處投擲異常,相當(dāng)于goto的段內(nèi)向下跳的段內(nèi)向下跳轉(zhuǎn)轉(zhuǎn) 。 throw關(guān)鍵字不帶表達(dá)式時表示類型信息流的默認(rèn)傳關(guān)鍵字不帶表達(dá)式時表示類型信息流的默認(rèn)傳遞,相當(dāng)于在當(dāng)前遞,相當(dāng)于在當(dāng)前catch塊暗中接受了前次投擲過來

11、的類型塊暗中接受了前次投擲過來的類型信息然后接著拋出,傳遞到后面的信息然后接著拋出,傳遞到后面的catch塊處理。塊處理。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)9 關(guān)鍵字關(guān)鍵字catch之后是圓括號包括的單參數(shù)入口形參,其之后是圓括號包括的單參數(shù)入口形參,其后再緊跟一對花括號定界的復(fù)合語句,形式上簡直活脫脫是后再緊跟一對花括號定界的復(fù)合語句,形式上簡直活脫脫是整個地將函數(shù)的定義體直接插入另一個函數(shù)代碼中,大抵上整個地將函數(shù)的定義體直接插入另一個函數(shù)代碼中,大抵上也不妨這么看待,因此也不妨這么看待,因此catch塊稱為捕獲處理器。定界的一塊稱為捕獲處理器。定界的一對花括號和單參數(shù)入口的類名是不可或缺的,其后

12、的形參對花括號和單參數(shù)入口的類名是不可或缺的,其后的形參expre則可有可無。但一旦派上用途其則可有可無。但一旦派上用途其expre的作用域限于的作用域限于該該catch處理器。省掉處理器。省掉expre的形式,的形式,catch中不能接受中不能接受throw拋出的數(shù)值而只捕獲類型信息。拋出的數(shù)值而只捕獲類型信息。 省略號省略號(.)的入口捕獲處理器表示處理任意類型的的入口捕獲處理器表示處理任意類型的throw表達(dá)式,可稱為默認(rèn)捕獲處理器。因此這個默認(rèn)捕獲表達(dá)式,可稱為默認(rèn)捕獲處理器。因此這個默認(rèn)捕獲處理器放置在多個處理器放置在多個catch塊的最后,保證先執(zhí)行特定類型的塊的最后,保證先執(zhí)行特

13、定類型的錯誤過濾,然后才進(jìn)行一般的處理。錯誤過濾,然后才進(jìn)行一般的處理。C/C+程序設(shè)計(jì)程序設(shè)計(jì)10 throw拋出的表達(dá)式既有數(shù)值也有該數(shù)值對應(yīng)的類型,拋出的表達(dá)式既有數(shù)值也有該數(shù)值對應(yīng)的類型,類型是第一重要的,其次才是數(shù)值。類型是第一重要的,其次才是數(shù)值。throw拋出一個類型,拋出一個類型,catch捕獲處理器進(jìn)行攔截,攔截的指標(biāo)就是其入口的類捕獲處理器進(jìn)行攔截,攔截的指標(biāo)就是其入口的類型。如果捕獲入口的類型和型。如果捕獲入口的類型和throw投射的類型一致,則觸發(fā)投射的類型一致,則觸發(fā)離拋射位置最近的離拋射位置最近的catch處理器,其次處理器,其次throw表達(dá)式的值初表達(dá)式的值初始

14、化始化catch的形參;不帶表達(dá)式的的形參;不帶表達(dá)式的throw默認(rèn)投擲,其暗中默認(rèn)投擲,其暗中接受的類型發(fā)射到下一個默認(rèn)的接受的類型發(fā)射到下一個默認(rèn)的catch(.)處理器。處理器。 try塊中一般包含至少一條塊中一般包含至少一條throw語句,根本不含語句,根本不含throw語句的語句的try塊形同虛設(shè)塊形同虛設(shè),導(dǎo)致其后的導(dǎo)致其后的catch成為死碼區(qū)。不在成為死碼區(qū)。不在try塊之內(nèi)的塊之內(nèi)的throw語句觸發(fā)程序的非正常結(jié)束,是編程的禁語句觸發(fā)程序的非正常結(jié)束,是編程的禁忌。忌。C/C+程序設(shè)計(jì)程序設(shè)計(jì)11 必須至少有一個必須至少有一個catch塊緊隨塊緊隨try塊之后,兩者之間不

15、能塊之后,兩者之間不能插入其它的語句。一個插入其它的語句。一個try塊可以帶多個塊可以帶多個catch塊,多個塊,多個catch處理器的入口形參其類名在重載的含義上必須是無歧處理器的入口形參其類名在重載的含義上必須是無歧義的。義的。 異常處理的語法異常處理的語法(其中其中type1 ,type2 typen是已聲明的類是已聲明的類型如型如int或或char*等等) 格式為:格式為: try 內(nèi)嵌若干內(nèi)嵌若干throw 語句的語句序列;語句的語句序列; catch (type1 e1) 語句塊語句塊1; catch (type2 e2) 語句塊語句塊2; catch (typen en) 語句塊

16、語句塊n; catch (.) 匹配任意類型的語句塊匹配任意類型的語句塊; 隨后語句隨后語句; C/C+程序設(shè)計(jì)程序設(shè)計(jì)12 如上的異常處理可稱為如上的異常處理可稱為trycatch控制結(jié)構(gòu),這個控制控制結(jié)構(gòu),這個控制結(jié)構(gòu)就像結(jié)構(gòu)就像ifelse控制結(jié)構(gòu)是正常流程的一部分??刂平Y(jié)構(gòu)是正常流程的一部分。catch塊中塊中方括號括起來的表達(dá)式方括號括起來的表達(dá)式e1,e2,en表示可選項(xiàng)。表示可選項(xiàng)。 流程通過正常次序進(jìn)入流程通過正常次序進(jìn)入try塊,有選擇地觸發(fā)一個塊,有選擇地觸發(fā)一個catch塊的運(yùn)行。塊的運(yùn)行。 流程的路由機(jī)制是:流程的路由機(jī)制是: 首先檢查觸發(fā)首先檢查觸發(fā)throw語句所在

17、的函語句所在的函數(shù),確定數(shù),確定throw隸屬的隸屬的try塊,如果這一步成功,則根據(jù)塊,如果這一步成功,則根據(jù)throw之后的表達(dá)式推演出其類型,用這個類型與之后的表達(dá)式推演出其類型,用這個類型與try塊管轄塊管轄的的catch塊根據(jù)其先后出現(xiàn)的次序比較,如果探查到與對口塊根據(jù)其先后出現(xiàn)的次序比較,如果探查到與對口的的catch塊類型相吻合,則流程控制交給這個塊類型相吻合,則流程控制交給這個catch塊。省略塊。省略號形式的號形式的catch捕獲處理器放置在最后,以免屏蔽其后的捕獲處理器放置在最后,以免屏蔽其后的catch塊。塊。C/C+程序設(shè)計(jì)程序設(shè)計(jì)13 如果一個異常得到成功的捕獲處理且

18、程序沒有終止,則如果一個異常得到成功的捕獲處理且程序沒有終止,則執(zhí)行執(zhí)行trycatch控制結(jié)構(gòu)之后的語句??刂平Y(jié)構(gòu)之后的語句。 同樣如果同樣如果try塊的語句全部遍歷并無塊的語句全部遍歷并無throw語句喚醒,流語句喚醒,流程無視所有的程無視所有的catch塊,塊, 直接跳到直接跳到trycatch控制結(jié)構(gòu)的隨后語句繼續(xù)執(zhí)行??刂平Y(jié)構(gòu)的隨后語句繼續(xù)執(zhí)行。 如果觸動了如果觸動了throw語句拋出一個類型信息流,而沒有相語句拋出一個類型信息流,而沒有相應(yīng)的應(yīng)的catch捕獲器予以化解,則企圖啟動捕獲器予以化解,則企圖啟動terminate函數(shù),該函數(shù),該函數(shù)調(diào)用函數(shù)調(diào)用abort函數(shù),程序非正常

19、地退出,這種退出可引發(fā)函數(shù),程序非正常地退出,這種退出可引發(fā)運(yùn)行錯誤。運(yùn)行錯誤。C/C+程序設(shè)計(jì)程序設(shè)計(jì)14 下面的例子一個是異常處理另一個是簡單的下面的例子一個是異常處理另一個是簡單的if語句加靜語句加靜態(tài)變量的跟蹤,兩者實(shí)現(xiàn)相同的功能。態(tài)變量的跟蹤,兩者實(shí)現(xiàn)相同的功能。 程序員的自行跟蹤技術(shù)代碼略微復(fù)雜,但執(zhí)行文件短小程序員的自行跟蹤技術(shù)代碼略微復(fù)雜,但執(zhí)行文件短小精悍精悍, 其其debug和和release版本大小分別為版本大小分別為153kb,28kb 。異。異常處理的界面統(tǒng)一但執(zhí)行文件的負(fù)擔(dān)增添許多,其常處理的界面統(tǒng)一但執(zhí)行文件的負(fù)擔(dān)增添許多,其debug和和release版本大小分

20、別為版本大小分別為161kb,32kb。 編譯器在幕后進(jìn)行了復(fù)雜的跟蹤、堆棧消息過濾等通用編譯器在幕后進(jìn)行了復(fù)雜的跟蹤、堆棧消息過濾等通用的異常處理,因此代價是不可避免的。的異常處理,因此代價是不可避免的。 資料顯示異常機(jī)制導(dǎo)致的時間代價為資料顯示異常機(jī)制導(dǎo)致的時間代價為5%,空間大小為,空間大小為%7左右。左右。C/C+程序設(shè)計(jì)程序設(shè)計(jì)15例例 C+異常處理技術(shù)異常處理技術(shù)# include long DivThrow (long x, long y) if (y=0) throw x;return x/y;void ExceptHanding (long u,long v) try lon

21、g d=DivThrow (u,v); printf (ExceptHanding %d/%d=%dn,u,v,d); C/C+程序設(shè)計(jì)程序設(shè)計(jì)16catch (long x) printf (ExceptHanding=%d. Cant divided by zeron,x); void main() ExceptHanding(5,3); ExceptHanding(5,0); C/C+程序設(shè)計(jì)程序設(shè)計(jì)17例例 if語句加靜態(tài)變量的跟蹤語句加靜態(tài)變量的跟蹤# include enum NoZero=1,IsZero=1000 ; static int sTrace=NoZero; long

22、 DivideIf (long x,long y) if (y=0) sTrace=IsZero; return x; return x/y; C/C+程序設(shè)計(jì)程序設(shè)計(jì)18void TraceHanding (long u,long v) long d=DivideIf (u,v);switch (sTrace) case NoZero: printf (TraceHanding %d/%d=%dn,u,v,d);break; case IsZero: printf (TraceHanding %d. Cant divided by zeron,d); break; void main() T

23、raceHanding (6,2); TraceHanding (2,0); C/C+程序設(shè)計(jì)程序設(shè)計(jì)19 C+異常處理并不具備異常發(fā)生后異常處理并不具備異常發(fā)生后,程序的自恢復(fù)功能。程序的自恢復(fù)功能。 如何實(shí)施亡羊補(bǔ)牢的事后補(bǔ)救,程序員依然得小心設(shè)置如何實(shí)施亡羊補(bǔ)牢的事后補(bǔ)救,程序員依然得小心設(shè)置靜態(tài)的或外部的全局變量。靜態(tài)的或外部的全局變量。 在可能冒出不測的程序段之前,保存現(xiàn)場到硬盤,然后在可能冒出不測的程序段之前,保存現(xiàn)場到硬盤,然后通過異常處理的強(qiáng)大功能在合適的地方放置通過異常處理的強(qiáng)大功能在合適的地方放置catch捕獲器,捕獲器,對于最容易萌生的錯誤如求逆失敗等安排相應(yīng)的對于最容易

24、萌生的錯誤如求逆失敗等安排相應(yīng)的catch塊在塊在路由的前面,然后及時的予以處理。路由的前面,然后及時的予以處理。 C/C+程序設(shè)計(jì)程序設(shè)計(jì)20三、異常的多路捕獲三、異常的多路捕獲 C+異常處理的優(yōu)點(diǎn)在于可以捕獲各種類型信息的異異常處理的優(yōu)點(diǎn)在于可以捕獲各種類型信息的異常,特別是面向?qū)ο蟮漠惓!3?,特別是面向?qū)ο蟮漠惓!?throw語句可以潛入比所隸屬的語句可以潛入比所隸屬的trycatch函數(shù)更內(nèi)層的函數(shù)更內(nèi)層的被調(diào)函數(shù)被調(diào)函數(shù),但應(yīng)保證但應(yīng)保證throw語句密切匹配同層的語句密切匹配同層的catch塊。塊。C/C+程序設(shè)計(jì)程序設(shè)計(jì)21例例 異常的多路捕獲異常的多路捕獲# include e

25、num enumType eChars,eLong, eClass, eUnknown, eSkip ;class ClassE;struct Unknown ;void PolyHanding (int kind) if (kind=eSkip) throw eSkip; try if (kind=eChars) throw string type; if (kind=eLong) throw (long) kind; if (kind=eClass) throw ClassE (); if (kind=eUnknown) throw Unknown(); C/C+程序設(shè)計(jì)程序設(shè)計(jì)22 catch (char* s) printf (Except Handler is=%st,s); catch (long

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論