版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2009-10-27
嵌入式在線
HYPERLINK"javascript:;"保藏|HYPERLINK"javascript:doPrint();"打印
在嵌入式系統(tǒng)的軟件設(shè)計(jì)中,“匯編語(yǔ)言+C語(yǔ)言”早已成為理所當(dāng)然的經(jīng)典組合。的確,對(duì)于硬件配置來說,匯編語(yǔ)言清楚明白;對(duì)于上層設(shè)計(jì)來說,C語(yǔ)言緊湊高效.這樣的搭配能夠滿意大多數(shù)傳統(tǒng)嵌入式系統(tǒng)應(yīng)用的需要。隨著技術(shù)水平的提高,今日的嵌入式系統(tǒng)也比過去更加深化到人們的日常生活中,大到汽車、飛機(jī)、火箭,小到手機(jī)、打印機(jī)、鬧鐘、手表,都可以找到嵌入式系統(tǒng)的蹤影。然而,這看似一成不變的情況,也在悄然轉(zhuǎn)變。隨著網(wǎng)絡(luò)、多媒體等技術(shù)的消滅、進(jìn)展與普及,對(duì)嵌入式系統(tǒng)應(yīng)用有了新的要求,也給了其他高級(jí)語(yǔ)言,格外是C++語(yǔ)言以機(jī)會(huì)。由此帶來的在語(yǔ)言使用中的平安問題,目前雖然還未凸顯,但依據(jù)以往的閱歷來看,終將成為限制行業(yè)進(jìn)展的新瓶頸.已有的C++語(yǔ)言國(guó)際標(biāo)準(zhǔn)雖然浩大細(xì)致,但作為一個(gè)“語(yǔ)言標(biāo)準(zhǔn)”,只能是盡力做得面面俱到,其目標(biāo)在于構(gòu)造一個(gè)語(yǔ)句合法性的權(quán)威依據(jù),以約束人們對(duì)于C++的使用。但它并不是針對(duì)應(yīng)用而寫的規(guī)范,對(duì)于可能遇到的平安性問題也無法進(jìn)行格外深化的探討,更加沒有平安方面的實(shí)踐閱歷支撐.一個(gè)針對(duì)平安方面的、被國(guó)際所認(rèn)可的使用規(guī)范,無疑是C++語(yǔ)言在嵌入式系統(tǒng)中得到廣泛應(yīng)用的堅(jiān)實(shí)基礎(chǔ)與助推劑。1C++在嵌入式應(yīng)用中的機(jī)遇與挑戰(zhàn)C++作為一門高級(jí)語(yǔ)言,人們?cè)谔峒八鼤r(shí),總難免會(huì)談到C語(yǔ)言.直至今日,很多人對(duì)于C++語(yǔ)言的生疏仍然是“C語(yǔ)言的超集"。這是由于C++的起源與C語(yǔ)言有著千絲萬縷的聯(lián)系。1978年,美國(guó)貝爾實(shí)驗(yàn)室的DennisRitchie和BrianKernighan在BCPL以及其簡(jiǎn)化版本B語(yǔ)言的基礎(chǔ)之上開發(fā)了C語(yǔ)言,并合作出版了《TheCProgrammingLan-guage》。C語(yǔ)言飛速得到了大家的認(rèn)可,并廣為流傳.1989年,ANSI推出了第一個(gè)C語(yǔ)言的標(biāo)準(zhǔn)--X3.159—1989,并被ISO接受,隨之發(fā)布.ISO/IEC9899—1990。早在C語(yǔ)言標(biāo)準(zhǔn)發(fā)布之前,貝爾實(shí)驗(yàn)室的BjarneStroustrup就致力于在C語(yǔ)言里增加類、函數(shù)類型檢查以及其他的一些優(yōu)秀特征,于1980年發(fā)布“CwithClasses"。經(jīng)過持續(xù)的努力,他最終完成了對(duì)C語(yǔ)言的改造,由此創(chuàng)生出一門新語(yǔ)言—-C++,并出版了《TheC++ProgrammingLanguage》一書。由于它帶來了持續(xù)的影響,ISO于1998年發(fā)布ISO/IEC14882:1998;幾乎同一時(shí)間,ANSI也發(fā)布了類似標(biāo)準(zhǔn),這標(biāo)志著C++作為一門獨(dú)立語(yǔ)言的標(biāo)準(zhǔn)化得到了官方的認(rèn)可。統(tǒng)計(jì)數(shù)據(jù)表明,日常生活中一個(gè)美國(guó)人平均占用8個(gè)微掌握器,這些都離不開嵌入式系統(tǒng)的應(yīng)用。然而嵌入式系統(tǒng)軟件技術(shù)似乎落后于當(dāng)前的軟件進(jìn)展形勢(shì),近年來才逐漸由匯編語(yǔ)言過渡到面對(duì)過程的C語(yǔ)言.但對(duì)于面對(duì)對(duì)象語(yǔ)言的應(yīng)用還很有限.這一方面是由于嵌入式開發(fā)人員多年來應(yīng)付有限資源的閱歷而養(yǎng)成的保守態(tài)度,另一方面也是由于長(zhǎng)期以來,嵌入式系統(tǒng)應(yīng)用設(shè)計(jì)中,人們要花費(fèi)很多精力在底層硬件的驅(qū)動(dòng)上,功能實(shí)現(xiàn)也主要局限在實(shí)時(shí)操作系統(tǒng)和相關(guān)支撐軟件的層次,并不涉及過多的應(yīng)用軟件開發(fā)。這種在嚴(yán)苛條件下追求效率與實(shí)時(shí)性的任務(wù),其他的高級(jí)語(yǔ)言并沒有格外的優(yōu)勢(shì)。最近幾年,嵌入式系統(tǒng)領(lǐng)域又有了新的進(jìn)展。首先,隨著手機(jī)、PDA等消費(fèi)性電子產(chǎn)品的飛速增長(zhǎng),嵌入式系統(tǒng)的市場(chǎng)規(guī)模在飛速擴(kuò)大,同時(shí)越來越多的智能嵌入式應(yīng)用場(chǎng)合需要互聯(lián)網(wǎng)的支持,這要求嵌入式系統(tǒng)的軟件具有更好的應(yīng)用性和更高的簡(jiǎn)潔性;其次,隨著芯片等相關(guān)領(lǐng)域的技術(shù)進(jìn)步,嵌入式系統(tǒng)工程師們不再需要時(shí)時(shí)刻刻去考慮資源是否夠用了。當(dāng)面對(duì)對(duì)象的高級(jí)語(yǔ)言參加到嵌入式系統(tǒng)設(shè)計(jì)中去不再遙不行準(zhǔn)時(shí),語(yǔ)言的效率則成為突出的問題。依據(jù)《ThinkinginC++》一書的總結(jié),C++與C的效率差別往往在±5%,這使得C++在新一輪的嵌入式應(yīng)用進(jìn)展浪潮中占得先機(jī)。值得注意的是,盡管自1998年發(fā)布最初的C++標(biāo)準(zhǔn)—-ISO/IEC14882:1998以來,每5年都會(huì)對(duì)此標(biāo)準(zhǔn)進(jìn)行一次更新,但是由于C++語(yǔ)言過于簡(jiǎn)潔,以及它經(jīng)歷了長(zhǎng)年的演化,直到2004年,沒有任何一款編譯器完全支持ISOC++。這對(duì)于時(shí)常要面對(duì)各種嚴(yán)苛條件的嵌入式系統(tǒng)應(yīng)用工程師們來說,是難以忍受的。同時(shí),即使是符合ISOC++標(biāo)準(zhǔn)的語(yǔ)句或者格式,對(duì)于實(shí)際的應(yīng)用場(chǎng)合來說,也存在著重大隱患,而不應(yīng)當(dāng)被直接接受。因此,人們迫切需要一個(gè)正式的基于平安角度考慮的C++語(yǔ)言使用規(guī)范.2關(guān)于MISRAMISRA(theMotorIndustrySoftwareReliabilityAs—sociation),即汽車工業(yè)軟件牢靠性協(xié)會(huì),于1994.年在英國(guó)成立,以“協(xié)助汽車工業(yè)供應(yīng)平安、牢靠的軟件”為使命,期望通過“規(guī)范指南”的形式來約束人們?cè)谄囯娮右约捌渌度胧较到y(tǒng)開發(fā)領(lǐng)域或涉及平安與牢靠性的領(lǐng)域中對(duì)于程序語(yǔ)言的使用.由于這些“規(guī)范指南”都是從大量工程實(shí)踐中總結(jié)的第一手閱歷,因而具有極高的指導(dǎo)意義.經(jīng)過4年籌備,它在1998年發(fā)布了一個(gè)針對(duì)汽車工業(yè)的《GuidelinesfortheUseoftheCLangtlageinVehicleBasedSoftware》,簡(jiǎn)稱“MISRAC:1998’',針對(duì)那些滿意C語(yǔ)言標(biāo)準(zhǔn),卻存在平安隱患的語(yǔ)言使用習(xí)慣,提出了127條規(guī)章.由于它很好地解決了C語(yǔ)言國(guó)際標(biāo)準(zhǔn)的冗繁性,以及其中對(duì)于平安性考慮的不足性,從而得到了廣泛的好評(píng)。MISRA—C不僅成為眾多汽車廠商推崇的行業(yè)標(biāo)準(zhǔn),其影響力更是遠(yuǎn)遠(yuǎn)超出了汽車工業(yè),得到鐵路、航空航天、國(guó)防、醫(yī)療等眾多領(lǐng)域的認(rèn)可,成為“最佳實(shí)踐"解決方案。2004年,MISRA對(duì)于已有的規(guī)章進(jìn)行改編與擴(kuò)充,推出了“MISRAC2004”,首次將該規(guī)范指南的對(duì)象從汽車工業(yè)推廣到全部具有平安性要求的系統(tǒng)應(yīng)用中去,包含了強(qiáng)制規(guī)章121條,推舉規(guī)章20條,并刪除了15條舊規(guī)章,共計(jì)含有141條規(guī)章。時(shí)至今日,MISRA組織不僅是汽車工業(yè)軟件規(guī)范的權(quán)威,其制定的規(guī)范指南更得到了嵌入式系統(tǒng)應(yīng)用領(lǐng)域的廣泛認(rèn)可.考慮到近年來,C++語(yǔ)言在嵌入式系統(tǒng)中的應(yīng)用越來越多,2005年MISRAC++委員會(huì)成立,并于2008年推出針對(duì)C++語(yǔ)言的《MISRAC++:2008——GuidelinesfortheUSeoftheC++languageincriticalsys—tems〉〉,以下簡(jiǎn)稱“MISRAC++:2008”.有愛好的讀者可以聯(lián)系相關(guān)網(wǎng)站:http://www.misra—/,購(gòu)買簡(jiǎn)略的文檔.MISRAC++:2008同樣從推出之日起,就得到了業(yè)內(nèi)外廣泛關(guān)注。例如:LDRA軟件公司始終跟蹤著MIS—RAC++:2008的制定進(jìn)展,在MISRAC++:2008發(fā)布時(shí)同步宣稱已經(jīng)完成了對(duì)工具套件產(chǎn)品的相應(yīng)改進(jìn),使其符合MISRAC++:2008標(biāo)準(zhǔn)。(LDRA的Testbed產(chǎn)品曾成功用于“神舟"飛船項(xiàng)目的軟件測(cè)試)3MISRAC++概述作為規(guī)范指南,MISRAC++:2008基于ISO/IEC14882:2003的C++語(yǔ)言國(guó)際標(biāo)準(zhǔn),以規(guī)章(rule)的形式,給出了相關(guān)的建議。它的規(guī)章又細(xì)分為以下3種類型:①?gòu)?qiáng)制型(required),必須符合、允許例外;②推舉型(advisory),推舉符合;③不容商議?型(document),必須符合、不許例外.MISRAC++:2008中共給出了20個(gè)大類的規(guī)章(編號(hào)并不連續(xù)),細(xì)分為228條。簡(jiǎn)略情況如表1所列。文檔中全部規(guī)章的書寫格式如下:每條規(guī)章之后都有簡(jiǎn)略的解釋,并給出了一些簡(jiǎn)略的程序語(yǔ)句作為例子.下面分別針對(duì)上述3種規(guī)章類別,進(jìn)行舉例說明。規(guī)章0-1—1(強(qiáng)制)工程中不允許包含無法觸及的代碼上述例子里,條件推斷中的賦值語(yǔ)句和return語(yǔ)句之后的自增語(yǔ)句都是在任何條件下都無法觸及的死代碼,不允許這樣使用。規(guī)章0-1-2(強(qiáng)制)工程中不允許含有永久不會(huì)被執(zhí)行的路徑enumec{RED,BLUE,GREEN)col;if(col<=GREEN)//不符合規(guī)章,條件永久為真{//Willalwaysget,here}else{//代碼永久不會(huì)到達(dá)這里}由于枚舉類型有默認(rèn)的初始賦值0,1,2,…,故col永久≤GREEN。上述例子中,含有任何條件下都不會(huì)被執(zhí)行的路徑,不允許這樣使用。規(guī)章5-2-10(推舉)自增(++)/自減(—-)運(yùn)算符不應(yīng)與表達(dá)式中其他運(yùn)算符混合使用諸如下面的例程將導(dǎo)致理解上的混淆以及結(jié)果的不確定,在程序設(shè)計(jì)時(shí)應(yīng)盡可能避開。u8a=++u8b+u8c—;//不符合規(guī)章規(guī)章0-4-2(不容商議?)對(duì)于浮點(diǎn)運(yùn)算(floating—point)算法的使用,必須給出記錄平安的使用浮點(diǎn)算法需要具有較高的數(shù)字分析技能和對(duì)編譯器及硬件對(duì)象的深化了解。因此在使用浮點(diǎn)算法時(shí),必須先進(jìn)行分析:是否必須使用它、實(shí)行的方法是否可行、過程是否得到了正確的執(zhí)行,并將上述結(jié)果做出記錄。規(guī)章16—6-1(不容商議?)全部的庫(kù)函數(shù)代碼必須符合MISRAC++上述這些例子只是為了讓大家對(duì)MISRAC++:2008的3種規(guī)章有肯定的生疏,我們會(huì)結(jié)合相關(guān)內(nèi)容,在接下來的幾篇文章中進(jìn)一步商議?學(xué)習(xí)。不難發(fā)現(xiàn),很多違反了MISRAC++:2008中規(guī)章的例程都是符合C++語(yǔ)言標(biāo)準(zhǔn)的,但出于平安性考慮,應(yīng)當(dāng)被禁止或者謹(jǐn)慎使用。通覽之后,往往會(huì)發(fā)現(xiàn)自己平常從未注意的一些編程習(xí)慣,都已經(jīng)被嚴(yán)令禁止.它們有些是明顯有礙平安性的,有些則相對(duì)隱蔽。然而MISRA的號(hào)召力是不容小覷的。以嵌入式實(shí)時(shí)操作系統(tǒng)μC/OS—II為例,其2.52版本雖然已經(jīng)于2000年通過了美國(guó)航空管理局(FAA)的平安認(rèn)證,但2003年μC/OS-II的作者就依據(jù)MISRAC:1998規(guī)范又對(duì)源碼作了相應(yīng)的修改,并發(fā)布了2.62的新版本,宣稱其源代碼99%符合MISRAC:1998的要求.4平安性問題對(duì)于平安性,MISRA給出以下5種可能的平安問題來源:開發(fā)人員的錯(cuò)誤、開發(fā)人員對(duì)于語(yǔ)言的誤解、編譯器沒有依據(jù)開發(fā)人員的預(yù)期工作、編譯器本身含有錯(cuò)誤、運(yùn)行錯(cuò)誤.這些錯(cuò)誤的來源與實(shí)際使用的是何種計(jì)算機(jī)語(yǔ)言沒有關(guān)系,可以說比較全面地包含了嵌入式系統(tǒng)開發(fā)以及其他相關(guān)的軟件設(shè)計(jì)中可能導(dǎo)致平安問題的全部渠道。作為C++這樣一門面對(duì)對(duì)象的高級(jí)語(yǔ)言(由于其與C的淵源,嚴(yán)格地說,C++是具有某些面對(duì)對(duì)象特征的過程語(yǔ)言),通過類、函數(shù)參數(shù)類型檢查、模版、格外處理以及派生、繼承、多態(tài)等手段,使得其在保有高效率的同時(shí),實(shí)現(xiàn)了強(qiáng)大的功能,并帶來了自頂向下的模塊化程序設(shè)計(jì)理念。但編程靈敏度的提高,也令其代碼簡(jiǎn)潔而易錯(cuò)。與C語(yǔ)言相比,它所面對(duì)的平安問題將更為隱蔽,更加難以發(fā)現(xiàn)。但就對(duì)數(shù)據(jù)的封裝而言,C++遠(yuǎn)遠(yuǎn)優(yōu)于C,只要參照合理的規(guī)范指南,進(jìn)行項(xiàng)目的開發(fā),就可以通過充分發(fā)揮C++靈敏的特點(diǎn),應(yīng)用到更多更廣的工程領(lǐng)域.5行業(yè)展望標(biāo)準(zhǔn)與規(guī)范從來沒有如眼下這般備受重視過.一個(gè)權(quán)威的標(biāo)準(zhǔn)或規(guī)范,不僅將成為相關(guān)領(lǐng)域的“金科玉律”,更是行業(yè)動(dòng)向的風(fēng)向標(biāo)??梢哉f正是由于MISRA-C的存在,使得在高級(jí)語(yǔ)言種類繁多的今日,C語(yǔ)言的地位仍然無可替代。此次MISRA攜著在C語(yǔ)言上的巨大成功,選擇了C++語(yǔ)言進(jìn)行新的規(guī)范化嘗試,不僅由于C++語(yǔ)言的群眾基礎(chǔ)深厚,更是表明白嵌入式系統(tǒng)領(lǐng)域內(nèi)大多數(shù)專家的觀點(diǎn):如果說將來能有一門語(yǔ)言取代目前C語(yǔ)言在嵌入式系統(tǒng)應(yīng)用中的地位的話,也只能是C++語(yǔ)言。一名成功的嵌入式系統(tǒng)工程師,必須是對(duì)行業(yè)動(dòng)向極為敏感的,也只有這樣,才能在知識(shí)爆炸的今日緊跟時(shí)代潮流。從使用C語(yǔ)言到使用C++語(yǔ)言是一個(gè)巨大的跨越,決不僅僅像使用“增強(qiáng)的C”那么簡(jiǎn)潔,需要從現(xiàn)在就開頭學(xué)習(xí)。而從學(xué)習(xí)之初就養(yǎng)成的良好的語(yǔ)言使用習(xí)慣,將決定將來進(jìn)階的速度與可能性。MISRAC++:2008無疑是培育這樣良好習(xí)慣的最佳手冊(cè)MISRA—C:2004HYPERLINK”http://huiorui。blog.163.com/blog/stat(yī)ic/61612737200812015733273/"大
HYPERLINK"http://huiorui.blog.163。com/blog/static/61612737200812015733273/"\l”#"中
HYPERLINK"http://huiorui。blog.163.com/blog/static/61612737200812015733273/"小
MISRA(TheMotorIndustrySoftwareReliabilityAssociation汽車工業(yè)軟件牢靠性協(xié)會(huì))MISRA是汽車工業(yè)C語(yǔ)言編程指導(dǎo),是目前公認(rèn)的最優(yōu)秀的嵌入式C語(yǔ)言的編碼規(guī)范,在航空/航天、汽車、醫(yī)療、船舶、電信等對(duì)軟件平安性要求比較高的行業(yè)得到了廣泛的應(yīng)用。在1998年版的基礎(chǔ)上,MISRA組織最新發(fā)布了MISRA-C:2004MISRA-C:2004包括141條規(guī)章,其中121條是強(qiáng)制(Required)遵守的,20條是建議(Advisory)遵守的.MISRA官方網(wǎng)站:HYPERLINK"http://www。misra.org.uk/"www.misra。org。ukMISRA規(guī)章的簡(jiǎn)略內(nèi)容需要購(gòu)買,印刷版本價(jià)格$76,電子版本(PDF)價(jià)格£10.全部141條規(guī)章的中英文對(duì)比如下,請(qǐng)參考。在以后的日子里,我還會(huì)間續(xù)寫一些文章,來介紹某些規(guī)章的必要性。11.1
全部代碼必須符合ISO9899:1990標(biāo)準(zhǔn)(C編程語(yǔ)言標(biāo)準(zhǔn)).AllcodeshallconformtoISO9899:1990'Programminglanguages—C';1.2
軟件不行依靠未定義或未指明的行為.(未指明的行為會(huì)產(chǎn)生不行靠性)Norelianceshallbeplacedonundefinedorunspecifiedbehaviour;1.3
只有當(dāng)目標(biāo)代碼的一般定義界面標(biāo)準(zhǔn)和語(yǔ)言/編譯器/匯編器相全都的時(shí)候才能使用多種編譯器和/或多種語(yǔ)言。Multiplecompilersand/orlanguagesshallonlybeusedifthereisacommondefinedinterfacestandardforobjectcodetowhichthelanguage/compilers/assemblersconform;1。4
編譯器、連接器和標(biāo)識(shí)符不能支持超過31個(gè)字符的有效性。Thecompiler/linker/Identifiers(internalandexternal)shallnotrelyonsignificanceofmorethan31characters.;
1.5
浮點(diǎn)執(zhí)行應(yīng)該符合明確的浮點(diǎn)標(biāo)準(zhǔn).Floatingpointimplementationsshplywithadefinedfloatingpointstandard;22。1應(yīng)該封裝并隔離匯編語(yǔ)言.Assemblylanguageshallbeencapsulat(yī)edandisolated;2.2在源代碼中應(yīng)該只使用‘/*.。。*/’的注釋風(fēng)格.Sourcecodeshallonlyuse/*...*/stylecomments;2。3在注釋中不行以使用‘/*’。Thecharactersequence/*shallnotbeusedwithinment;2.4不行以注釋掉部分代碼.Sectionsofcodeshouldnotbe'commentedout';32。1
必須記錄全部與使用執(zhí)行定義程序有關(guān)的行為.Allusageofimplementation—definedbehaviourshallbedocumented;2。2
必須記錄字符集與其編碼。Thecharactersetandthecorrespondingencodingshallbedocumented;2。3
應(yīng)該確定、記錄并考慮選定編譯器中的整數(shù)除法。Theimplementationegerdivisioninthechosencompilershouldbedetermined,documentedandtakenintoaccount.;2.4
必須記錄并解譯全部‘#pragma'指示的使用.Allusesofthe#pragmadirectiveshallbedocumentedandexplained.;2.5
如果代碼使用位域,則必須紀(jì)錄位段的執(zhí)行定義行為與位段的組裝.Theimplementation-definedbehaviourandpackingofbitfieldsshallbedocumentedifbeingreliedupon;2.6
全部執(zhí)行代碼使用的程序庫(kù)必須符合本文件的規(guī)定,并必須經(jīng)過適當(dāng)?shù)拇_認(rèn)。Alllibrariesusedinproductioncodeshallbewrittentocomplywiththeprovisionsofthisdocument,andshallhavebeensubjecttoappropriatevalidation。;44.1只可使用國(guó)際標(biāo)準(zhǔn)化組織(ISO)C語(yǔ)言標(biāo)準(zhǔn)定義的轉(zhuǎn)義-序列。Onlythosee(cuò)scapesequenceswhicharedefinedintheISOCstandardshallbeused.;3。2
不行使用三符組(??x)。Trigraphsshallnotbeused.;55.1內(nèi)外標(biāo)識(shí)符不能支持超過31個(gè)字符的有效性。Identifiers(internalandexternal)shallnotrelyonthesignificanceofmorethan31characters;
5.2內(nèi)層范圍標(biāo)識(shí)符不行與外層范圍標(biāo)識(shí)符同名,否則會(huì)屏蔽那個(gè)標(biāo)識(shí)符。Identifiersinaninnerscopeshallnotusethesamenameasanidentifierinanouterscope,andthereforehidethatidentifier。;5.3‘Typedef’的名字必須使用唯一的標(biāo)識(shí)符。Atypedefnameshallbeauniqueidentifier.;5。4一個(gè)標(biāo)記符只能用于唯一的標(biāo)識(shí)符。Atagnameshallbeauniqueidentifier;5。5不應(yīng)該重用帶有靜態(tài)存儲(chǔ)的對(duì)象或函數(shù)標(biāo)識(shí)符.Noobjectorfunctionidentifierwithstaticstoragedurat(yī)ionshouldbereused;5.6一個(gè)名字空間的標(biāo)識(shí)符不行以與別的名字空間的標(biāo)識(shí)符同名,結(jié)構(gòu)體和聯(lián)合體的成員名除外。Noidentifierinonenamespaceshouldhavethesamespellingasanidentifierinanothernamespace,withthee(cuò)xceptionofstructureandunionmembernames;5。7標(biāo)識(shí)符名字不行以重用。Noidentifiernameshouldbereused;66.1“char”型的變量只能用于字符值的存儲(chǔ)和使用。Thetypecharshallbeusedonlyforstorageanduseofcharactervalues;6。2有符號(hào)和無符號(hào)的“char"型變量只能用于數(shù)值的存儲(chǔ)和使用。Signedandunsignedchartypeshallbeusedonlyforthestorageanduseofnumericvalues;6。3基本類型應(yīng)該用指示大小和有無符號(hào)的typedef來代替。Typedefsthatindicatesizeandsignednessshouldbeusedinplaceofthebasictypes;6。4位域只能被定義為無符號(hào)整型或有符號(hào)整型。Bitfieldsshallonlybedefinedtobeoftypeunsignedintorsignedint.;6.5使用有符號(hào)整型的位域的大小必須至少是2位。Bitfieldsoftypesignedintshallbeatleast2bitslong。;7
7.1不要使用“零”以外的八進(jìn)制常量與八進(jìn)制的轉(zhuǎn)義序列(octalescapesequence).Octalconstants(otherthanzero)andoctalescapesequencesshallnotbeused.;8
8.1函數(shù)必須有原型聲明,原型對(duì)于函數(shù)的定義和調(diào)用必須是可見的。Functionsshallhaveprototypedeclarat(yī)ionsandtheprototypeshallbevisibleatboththefunctiondefinitionandcall.;8。2當(dāng)聲明或定義對(duì)象或函數(shù)的時(shí)候,必須明確規(guī)定它的類型。Wheneveranobjectorfunctionisdeclaredordefined,itstypeshallbeexplicitlystated;8。3
對(duì)于每個(gè)函數(shù)的參數(shù)來說,聲明和定義中給出的類型必須全都,返回類型也必須全都。Foreachfunctionparameterthetypegiveninthedeclarat(yī)ionanddefinitionshallbeidentical,andthereturntypesshallalsobeidentical.;8。4
如果對(duì)象或函數(shù)被生命多次,類型必須是兼容的。Ifobjectsorfunctionsaredeclaredmorethanoncetheirtypesshallbecompatible.;8.5
在頭文件中不能有對(duì)象或函數(shù)的聲明。Thereshallbenodefinitionsofobjectsorfunctionsinaheaderfile;8.6
函數(shù)必須在文件范圍內(nèi)聲明。Functionsshallalwaysbedeclaredatfilescope.;8.7
如果對(duì)象只在單個(gè)函數(shù)中被訪問,那么它們必須在程序塊中定義。Objectsshallbedefinedat(yī)blockscopeiftheyareonlyaccessedfromwithinasinglefunction;8。8
外部對(duì)象或外部函數(shù)只可以在一個(gè)文件中定義,并且只能在一個(gè)文件中定義。Anexternalobjectorfunctionshallbedeclaredinonefileandonlyonefile;8.9
有外部鏈接的標(biāo)識(shí)符必須只有一個(gè)外部定義。Anidentifierwithexternallinkageshallhaveexactlyoneexternaldefinition.;8。10
全部文件范圍的對(duì)象或函數(shù)聲明都必須有內(nèi)部鏈接,除非必需外部鏈接。Alldeclarationsanddefinitionsofobjectsorfunctionsatfilescopeshallhaveinternallinkageunlessexternallinkageisrequired;8.11
在有內(nèi)部鏈接的對(duì)象和函數(shù)的定義和聲明中必須使用靜態(tài)存儲(chǔ)類說明符.Thestaticstorageclassspecifiershallbeusedindefinitionsand
declarat(yī)ionsofobjectsandfunctionsthathaveinternallinkage;8.12
當(dāng)聲明一個(gè)有外部鏈接的數(shù)組時(shí),必須通過初始化明確規(guī)定或隱式定義它的大小。Whenanarrayisdeclaredwithexternallinkage,itssizeshallbestatedexplicitlyordefinedimplicitlybyinitialisation;99。1全部自動(dòng)變量在使用前必須配值.Allautomaticvariablesshallhavebeenassignedavaluebeforebeingused.;9。2在結(jié)構(gòu)體與數(shù)組非零的初始化中,必須使用花括號(hào)來指示和匹配結(jié)構(gòu)。Bracesshallbeusedtoindicateandmatchthestructureinthenon-zeroinitializationofarraysandstructures。;9.3在枚舉表中,不行以用'=’結(jié)構(gòu)來明確初始化除第一個(gè)成員以外的其他成員,除非全部條目都被明確初始化。Inanenumeratorlist,the’='constructshallnotbeusedtoexplicitlyinitialisemembersotherthanthefirst,unlessallitemsareexplicitlyinitialised。;
1010。1整數(shù)類型表達(dá)式的值不行以被隱式地轉(zhuǎn)換為別的基本類型。Thevalueofanexpressionofintegertypeshallnotbeimplicitlyconvertedtoadifferentunderlyingtype;10。2
浮點(diǎn)類型表達(dá)式的值不行以被隱式地轉(zhuǎn)換為別的類型。Thevalueofanexpressionoffloatingtypeshallnotbeimplicitlyconvertedtoadifferenttype;10.3
整數(shù)類型的簡(jiǎn)潔表達(dá)式的值只可能被轉(zhuǎn)換為比它更有限的具有和表達(dá)式的基本類型相同符號(hào)的類型.Thevalueofacomplexexpressionofintegertypemayonlybecasttoat(yī)ypethatisnarrowerandofthesamesignednessastheunderlyingtypeofthee(cuò)xpression;10.4
浮點(diǎn)類型的簡(jiǎn)潔表達(dá)式的值只可以被轉(zhuǎn)換為比其更有限的浮點(diǎn)類型.Thevalueofacomplexexpressionoffloattypemayonlybecasttonarrowerfloatingtype;10。5
如果位操作符'~’和’<<'應(yīng)用于基本類型無符號(hào)字符型或無符號(hào)短整型的操作數(shù),結(jié)果會(huì)立即轉(zhuǎn)換成操作數(shù)的基本類型。Ifthebitwiseoperator~and<〈areappliedtoanoperandofunderlyingtypeunsignedcharorunsignedshort,theresultshallbeimmediatlycasttotheunderlyingtypeoftheoperand;10.6
無符號(hào)類型的全部常量都必須加上后綴'U'.The'U'suffixshallbeappliedtoallconstantsofunsignedtypes;
1111.1指向函數(shù)的指針不能轉(zhuǎn)換成除整型以外的任何其他類型。Conversionshallnotbeperformedbetweenapointertoafunctionandanytypeotherthananintegraltype;11。2指向?qū)ο蟮闹羔槻荒苻D(zhuǎn)換成除整型、另一個(gè)指向?qū)ο蟮闹羔樆蛑赶騰oid的指針以外的任何其他指針.Conversionshallnotbeperformedbetwee(cuò)napointertoanobjectandanytypeotherthananintegraltype,anotherpointertoaobjecttypeorapointertovoid;11.3不行以進(jìn)行指針類型和整數(shù)類型之間的類型轉(zhuǎn)換。Acastshouldnotbeperformedbetweenapointertypeandanintegraltype;11.4不行以進(jìn)行一對(duì)象指針和另一對(duì)象之間的類型轉(zhuǎn)換。Acastshouldnotbeperformedbetweenapointertoobjecttypeandadifferentpointertoobjecttype;
11。5不行以進(jìn)行從通過指針訪問的類型中移除任何不變或可變限定條件的轉(zhuǎn)換。Acastshallnotbeperformedthatremovesanyconstorvolat(yī)ilequalificationfromthetypeaddressedbyapointer;1212.1
在表達(dá)式中,C操作符的優(yōu)先規(guī)章應(yīng)該設(shè)置限制相關(guān)性。LimiteddependenceshouldbeplacedonC'soperat(yī)orprecedencerulesinexpressions。;12。2
在標(biāo)準(zhǔn)允許的任何賦值挨次下表達(dá)式的值都必須相等。Thevalueofanexpressionshallbethesameunderanyorderofevaluationthatthestandardpermits.;12.3
含有副作用的表達(dá)式中應(yīng)該不使用sizeof操作符。Thesizeofoperatorshouldnotbeusedonexpressionsthat(yī)containsideeffects.;12.4
規(guī)律'&&’或規(guī)律'||'操作符的右操作數(shù)不能含有副作用.Therighthandoperandofalogical&&or||operat(yī)orshallnotcontainsideeffects。;
12.5
規(guī)律‘&&’或‘||'的操作數(shù)必須是基本表達(dá)式。Theoperandsofalogical&&or||shallbeprimary-expressions.;12。6
規(guī)律操作符(&&,||和!)的操作數(shù)應(yīng)該是有效的布爾變量。有效的布爾表達(dá)式不行以被作為除了(&&,||和!)以外的其他操作符的操作數(shù)來使用。Theoperandsofalogicaloperators(&&,||and?。﹕houldbeeffectivelyBoolean.ExpressionsthatareeffectivelyBooleanshouldnotbeusedasoperandstooperatorsotherthan
(&&,||and!).;12.7
位操作符不能應(yīng)用于基本類型是有符號(hào)類型的操作數(shù)。Bitwiseoperatorsshallnotbeappliedtooperandswhoseunderlyingtypeissigned;12。8
位移操作符的右操作數(shù)必須間于零和一個(gè)比左操作數(shù)的基本類型的位寬更小的數(shù)之間。Therighthandoperandofashiftoperat(yī)orshallliebetweenzeroandonelessthanthewidthinbitsoftheunderlyingtypeofthelefthandoperand。;12.9
一元減法操作符不行以被應(yīng)用于基本類型為無符號(hào)型的表達(dá)式.Theunaryminusoperatorshallnotbeappliedtoanexpressionwhoseunderlyingtypeisunsigned.;12.10
不行以使用逗號(hào)操作符。Thecommaoperatorshallnotbeused。;
12。11無符號(hào)整型常量表達(dá)式的賦值不應(yīng)該導(dǎo)致回轉(zhuǎn)。Evaluationofconstantunegerexpressionsshouldnotleadtowrap-around.;12。12
不行以用浮點(diǎn)值的基本比特表示法。Theunderlyingbitrepresentationsoffloating—pointvaluesshallnotbeused.;12.13在表達(dá)式中遞增(++)和遞減(--)操作符不能與其他操作符混合使用。Theincrement(++)anddecrement(—-)operatorsshouldnotbemixedwithotheroperatorsinanexpression;
1313.1在產(chǎn)生布爾值的表達(dá)式中不能使用賦值操作符。Assignmentoperatorsshallnotbeusedinexpressionsthat(yī)yieldaBooleanvalue.;13.2除非操作數(shù)是有效布爾變量,否則應(yīng)該明確測(cè)試這個(gè)值為非零值。Testsofavalueagainstzeroshouldbemadeexplicit,unlesstheoperandiseffectivelyBoolean;13。3浮點(diǎn)表達(dá)式不能用相等或不相等來測(cè)試.Floating-pointexpressionsshallnotbetestedforequalityorinequality.;13.4一個(gè)‘for’語(yǔ)句的掌握表達(dá)式不行以包含浮點(diǎn)類型的對(duì)象。Thecontrollingexpressionofaforstatementshallnotcontainanyobjectsoffloatingtype;13.5’for'語(yǔ)句的三個(gè)表達(dá)式只能用于循環(huán)掌握。Thethreeexpressionsofaforstatementshallbeconcernedonlywithloopcontrol;13。6用于迭代計(jì)數(shù)的for循環(huán)內(nèi)使用的數(shù)值變量不應(yīng)該在循環(huán)體內(nèi)修改。Numericvariablesbeingusedwithinaforloopforiterationcountingshouldnotbemodifiedinthebodyoftheloop.;13。7不允許結(jié)果不變的布爾操作。Booleanoperationswhoseresultsareinvariantshallnotbepermitted";
1414.1不行以存在不能到達(dá)的代碼。Thereshallbenounreachablecode.;14。2全部的非空語(yǔ)句,要么不管如何執(zhí)行都會(huì)至少產(chǎn)生一個(gè)副作用或者導(dǎo)致掌握流的轉(zhuǎn)變.Allnon—nullstatementsshalleitherhaveat(yī)leastonesidee(cuò)ffecthoweverexecutedorcausecontrolflowtochange;14。3在預(yù)處理之前,空語(yǔ)句只能自己?jiǎn)为?dú)消滅在一行;假如跟在空語(yǔ)句后面的第一個(gè)字符是空格符的話后面可以跟一個(gè)注釋。Beforepreprocessing,anullstatementshallonlyoccuronalinebyitself;itmaybefollowedbyacommentprovidedthatthefirstcharacterfollowingthenullstatementiswhite-spacecharacter;14。4不行使用‘goto’語(yǔ)句。Thegotostatementshallnotbeused.;14.5不行使用‘continue’語(yǔ)句。Thecontinuestatementshallnotbeused.;14.6任何迭代語(yǔ)句最多只能有一個(gè)break語(yǔ)句用來終止循環(huán)。Foranyiterat(yī)ionstatementthereshallbeatmostonebreakstatementusedforlooptermination;14.7函數(shù)中在函數(shù)的結(jié)尾必須有一個(gè)單獨(dú)的退出點(diǎn)。Afunctionshallhaveasinglepointofexitattheendofthefunction;14。8構(gòu)成'switch’,’while’,’do。..while’或’for'語(yǔ)句的主體的語(yǔ)句必須是復(fù)合語(yǔ)句。Thestatementformingthebodyofaswitch,while,do.。。whileorforstatementshallbeacompoundstatement;14.9'if'表達(dá)式結(jié)構(gòu)后面必須跟一個(gè)復(fù)合語(yǔ)句。'else’關(guān)鍵字后面必須跟一個(gè)復(fù)合語(yǔ)句或跟另一個(gè)'if’語(yǔ)句。Anif(expression)constructshallbefollowedbyacompoundstatement.Theelsekeywordshallbefollowedbyeitheracompoundstatement,oranotherifstatement;14。10全部的'if..。elseif'結(jié)構(gòu)都應(yīng)該包含一個(gè)最終的’else'子句。Allif...elseifconstructsshouldcontainafinalelseclause。;
1515。0‘switch’語(yǔ)句必須遵守MISRA-C的語(yǔ)法。AswitchstatementshallconformtoMISRA-Csyntax;15.1當(dāng)最內(nèi)圍的復(fù)合語(yǔ)句是‘switch'語(yǔ)句的正文時(shí)才可以使用‘switch’標(biāo)記。Aswitchlabelshallonlybeusedwhenthemostclosely-enclosingcompoundstatementisthebodyofaswitchstatement;15。2無條件的‘break’語(yǔ)句將會(huì)終止全部非空的‘switch’子句。Anunconditionalbreakstatementshallterminateeverynon—emptyswitchclause;15.3‘switch'語(yǔ)句的最后子句必須是‘default’子句。Thefinalclauseofaswitchstatementshallbethedefaultclause;15。4
'switch'表達(dá)式不應(yīng)該表示有效布爾變量的值。AswitchexpressionshouldnotrepresentavaluethatiseffectivelyBoolean;15.5全部‘switch’的語(yǔ)句必須至少有一個(gè)‘case'子句。Everyswitchstatementshallhaveat(yī)leastonecaseclause;1616.1函數(shù)不行以使用類型和數(shù)量不確定的參數(shù)來定義。Functionsshallnotbedefinedwithvariablenumbersofarguments.;
16。2函數(shù)不行以直接或間接地調(diào)用自己。Functionsshallnotcallthemselves,eitherdirectlyorindirectly.;16.3函數(shù)的原型聲明中全部參數(shù)必須有標(biāo)識(shí)符。Identifiersshallbegivenforalloftheparametersinafunctionprototypedeclaration.;16。4函數(shù)聲明與函數(shù)定義中的標(biāo)識(shí)符必須全都。Theidentifiersusedinthedeclarationanddefinitionofafunctionshallbeidentical.;16.5無參數(shù)的函數(shù)必須使用’void'參數(shù)類型聲明.Functionswithnoparametersshallbedeclaredwithparametertypevoid.;
16。6傳遞給函數(shù)的參數(shù)個(gè)數(shù)必須跟聲明參數(shù)個(gè)數(shù)全都。Thenumberofargumentspassedtoafunctionshallmatchthenumberofparameters.;
16.7如果函數(shù)原型中的指針參數(shù)不被用于轉(zhuǎn)變尋址對(duì)象,此指針應(yīng)被聲明為指向常量的指針。Apointerparameterinafunctionprototypeshouldbedeclaredaspointertoconstifthepointerisnotusedtomodifytheaddressedobject.;16.8返回類型非void的函數(shù)的全部推出路徑都必須有明確的帶有表達(dá)式的return語(yǔ)句。Allexitpathsfromafunctionwithnon—voidreturntypeshallhaveanexplicitreturnstat(yī)ementwithanexpression.;16。9使用函數(shù)標(biāo)識(shí)符時(shí)必須前面帶'&’或者帶有一個(gè)用’()'括起來的參數(shù)表,其中參數(shù)表可以為空.Afunctionidentifiershallonlybeusedwitheitherapreceding&,orwithaparenthesisedparameterlist,whichmaybeempty.;16.10如果一個(gè)函數(shù)返回錯(cuò)誤的信息,應(yīng)該測(cè)試這個(gè)錯(cuò)誤的信息。Ifafunctionreturnserrorinformation,thenthaterrorinformationshouldbetested。;1717.1指針運(yùn)算只能應(yīng)用于指示數(shù)組或數(shù)組變量地址的指針之間。Pointerarithmeticshallonlybeappliedtopointersthat(yī)addressanarrayorarrayelement。;17.2指針的減法只能應(yīng)用于指示同一個(gè)數(shù)組的元素地址的指針之間。Pointersubtractionshallonlybeappliedtopointersthat(yī)addresselementsofthesamearray.;17.3不行使用‘〉’,‘>=',‘〈’或‘〈=’于指針類型,除非其是指同一數(shù)組的指針。>,>=,〈,<=shallnotbeappliedtopointertypesexceptwheretheypointtothesamearray.;
17.4只有數(shù)組下標(biāo)的形式允許使用指針運(yùn)算。Arrayindexingshallbetheonlyallowedformofpointerarithmetic.;17。5對(duì)象聲明所包含的間接指針不應(yīng)該超過2層.Thedeclarationofobjectsshouldcontainnomorethan2levelsofpointerindirection.;
17.6自動(dòng)存儲(chǔ)的對(duì)象的地址不能賦給對(duì)象終止以后還可能連續(xù)存在的對(duì)象。Theaddressofanobjectwithautomat(yī)icstorageshallnotbeassignedtoanobjectthat(yī)maypersistaftertheobjecthasceasedtoexist。;1818.1全部結(jié)構(gòu)體與聯(lián)合體類型必須在翻譯單位完成。Allstructureoruniontypesshallbecompleteattheendofatranslationunit。;18。2不行以把對(duì)象支配給重疊對(duì)象。Anobjectshallnotbeassignedtoanoverlappingobject.;18.3為了無關(guān)的目的不能重用內(nèi)存空間。Anareaofmemoryshallnotbereusedforunrelatedpurposes.;
18.4不行使用聯(lián)合體。Unionsshallnotbeused;1919.1文件中,在#include語(yǔ)句之前只可使用其他的預(yù)處理指令或注釋。#includestatementsinafileshallonlybeprecededbyotherpre-processordirectivesorcomments.;19。2在#include指令的頭文件名中不應(yīng)該消滅非標(biāo)準(zhǔn)字符。Non—standardcharactersshouldnotoccurinheaderfilenamesin#includedirectives.;
19.3#include指令之后必須有〈filename>或\"filename\"的序列。The#includedirectiveshallbefollowedbyeithera<filename>or\"filename\”sequence。;19.4C語(yǔ)言的宏只可以擴(kuò)展為使用花括號(hào)的一個(gè)初始化表達(dá)式、一個(gè)常量、一個(gè)使用圓括號(hào)的表達(dá)式、一個(gè)類型的限定詞、一個(gè)存儲(chǔ)類的說明符或者一個(gè)‘do-while-zero’的結(jié)構(gòu)。Cmacrosshallonlyexpandtoabracedinitialiser,aconstant,aparenthesisedexpression,atypequalifier,astorageclassspecifier,orado-while-zeroconstruct。;19.5宏不行以在一個(gè)塊中被#define和#undef.Macrosshallnotbe#define’dand#undef'dwithinablock。;
19.6不行使用#undef.#undefshallnotbeused.;19.7與宏相比應(yīng)該優(yōu)先使用函數(shù).Afunctionshouldbeusedinpreferencetoamacro.;19.8使用類似函數(shù)的宏時(shí)必須調(diào)用其全部的參數(shù)。Afunction-likemacroshallnotbeinvokedwithoutallofitsarguments;19。9類似函數(shù)宏的參數(shù)不行以包含類似預(yù)處理指令的標(biāo)記。Argumentstoafunction-likemacroshallnotcontaintokensthatlooklikepre-processingdirectives.;19.10類似函數(shù)宏的定義中每個(gè)參數(shù)的實(shí)例必須放在圓括號(hào)中,除非其是‘#’或‘#?!牟僮鲾?shù).Inthedefinitionofafunction—likemacroeachinstanceofaparametershallbeenclosedinparenthesesunlessitisusedastheoperandof#or##。;19.11預(yù)處理指定中的全部宏標(biāo)識(shí)符都必須在使用前定義,除非在#ifdef和#ifndef預(yù)處理指令和define()操作符中。Allmacroidentifiersinpreprocess
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝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ù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度智慧校園宿管員綜合服務(wù)聘用合同范本4篇
- 個(gè)性化服務(wù)協(xié)議模板 2024全新出爐版B版
- 2025年度教育機(jī)構(gòu)場(chǎng)地租賃及設(shè)施共建合同4篇
- 2025年度新能源汽車充電樁研發(fā)與運(yùn)營(yíng)合同3篇
- 二零二五版智能法律助手APP下載與法律服務(wù)套餐協(xié)議3篇
- 專業(yè)空調(diào)安裝協(xié)議2024年細(xì)則版A版
- 2024美發(fā)行業(yè)專屬勞動(dòng)協(xié)議樣例版
- 二零二四外幣資金借貸風(fēng)險(xiǎn)監(jiān)控及應(yīng)對(duì)策略合同3篇
- 專項(xiàng)商鋪投資預(yù)訂協(xié)議:2024認(rèn)籌細(xì)則
- 二零二四商鋪物業(yè)管理與設(shè)施升級(jí)改造合同2篇
- 2024年石家莊正定國(guó)際機(jī)場(chǎng)改擴(kuò)建工程合同
- 2025年度愛讀書學(xué)長(zhǎng)定制化閱讀計(jì)劃合同2篇
- 江西省港口集團(tuán)有限公司招聘筆試沖刺題2025
- 河南省信陽(yáng)市浉河區(qū)9校聯(lián)考2024-2025學(xué)年八年級(jí)上學(xué)期12月月考地理試題(含答案)
- 火災(zāi)安全教育觀后感
- 快速康復(fù)在骨科護(hù)理中的應(yīng)用
- 國(guó)民經(jīng)濟(jì)行業(yè)分類和代碼表(電子版)
- ICU患者外出檢查的護(hù)理
- 公司收購(gòu)設(shè)備合同范例
- 廣東省潮州市2023-2024學(xué)年高二上學(xué)期語(yǔ)文期末考試試卷(含答案)
- 2024年光伏發(fā)電項(xiàng)目EPC總包合同
評(píng)論
0/150
提交評(píng)論