版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、“安全第一”的C語(yǔ)言編程規(guī)范作者:清華大學(xué) 陳萌萌 邵貝貝文章來(lái)源:?jiǎn)纹瑱C(jī)與嵌入式系統(tǒng)應(yīng)用 2006-4-6 17:44:18編者按:C語(yǔ)言是開發(fā)嵌入式應(yīng)用的主要工具, 然而C語(yǔ)言并非是專門為嵌入式系 統(tǒng)設(shè)計(jì),相當(dāng)多的嵌入式系統(tǒng)較一般計(jì)算機(jī)系統(tǒng)對(duì)軟件安全性有更苛刻的要求。1998年,MISRA旨出,一些在C看來(lái)可以接受,卻存在安全隱患的地方有 127處之 多。2004年,MISRA寸C的限制增加到141條。嵌入式系統(tǒng)應(yīng)用工程師借用計(jì)算機(jī)專家創(chuàng)建的 C語(yǔ)言,使嵌入式系統(tǒng)應(yīng)用得以 飛速發(fā)展,而MISRAO嵌入式系統(tǒng)應(yīng)用工程師對(duì) C語(yǔ)言嵌入式應(yīng)用做出的貢獻(xiàn)。 如今MISRA C已經(jīng)被越來(lái)越多的企業(yè)接
2、受,成為用于嵌入式系統(tǒng)的C語(yǔ)言標(biāo)準(zhǔn),特別是對(duì)安全性要求極高的嵌入式系統(tǒng),軟件應(yīng)符合 MISRAS準(zhǔn)。從本期開始,本刊將分6期,與讀者共同學(xué)習(xí)MISRAC第一講:“安全第一的 C語(yǔ)言編程規(guī)范”,簡(jiǎn)述 MISRAC勺概況。第二講:“跨越數(shù)據(jù)類型的重重陷阱”,介紹規(guī)范的數(shù)據(jù)定義和操作方式,重 點(diǎn)在隱式數(shù)據(jù)類型轉(zhuǎn)換中的問(wèn)題。第三講:”指針、結(jié)構(gòu)體、聯(lián)合體的安全規(guī)范”,解析如何安全而高效地應(yīng)用 指針、結(jié)構(gòu)體和聯(lián)合體。第四講:”防范表達(dá)式的失控”,剖析 MISRAC關(guān)于表達(dá)式、函數(shù)聲明和定 義等的不良使用習(xí)慣,最大限度地減小各類潛在錯(cuò)誤。第五講:“準(zhǔn)確的程序流控制”,表述 C語(yǔ)言中控制表達(dá)式和程序流控制的
3、規(guī) 范做法。第六講:“構(gòu)建安全的編譯環(huán)境”,講解與編譯器相關(guān)的規(guī)范編寫方式,避免 來(lái)自編譯器的隱患。C/C+語(yǔ)言無(wú)疑是當(dāng)今嵌入式開發(fā)中最為常見的語(yǔ)言。早期的嵌入式程序大都 是用匯編語(yǔ)言開發(fā)的,但人們很快就意識(shí)到匯編語(yǔ)言所帶來(lái)的問(wèn)題一一難移植、難 復(fù)用、難維護(hù)和可讀性極差。很多程序會(huì)因?yàn)楫?dāng)初開發(fā)人員的離開而必須重新編寫, 許多程序員甚至連他們自己幾個(gè)月前寫成的代碼都看不懂。C/C+鈉言恰恰可以解決這些問(wèn)題。作為一種相對(duì)“低級(jí)”的高級(jí)語(yǔ)言,C/C+®言能夠讓嵌入式程序員更自由地控制底層硬件,同時(shí)享受高級(jí)語(yǔ)言帶來(lái)的便利。對(duì)于 C語(yǔ)言和C+郵言, 很多的程序員會(huì)選擇C語(yǔ)言,而避開龐大復(fù)雜的C
4、+叫言。這是很容易理解的一一C 語(yǔ)言寫成的代碼量比C+叫言的更小些,執(zhí)行效率也更高。對(duì)于程序員來(lái)說(shuō),能工作的代碼并不等于“好”的代碼?!昂谩贝a的指標(biāo)很 多,包括易讀、易維護(hù)、易移植和可靠等。其中,可靠性對(duì)嵌入式系統(tǒng)非常重要, 尤其是在那些對(duì)安全性要求很高的系統(tǒng)中,如飛行器、汽車和工業(yè)控制中。這些系 統(tǒng)的特點(diǎn)是:只要工作稍有偏差,就有可能造成重大損失或者人員傷亡。一個(gè)不容 易出錯(cuò)的系統(tǒng),除了要有很好的硬件設(shè)計(jì)(如電磁兼容性),還要有很健壯或者說(shuō) “安全”的程序。然而,很少有程序員知道什么樣的程序是安全的程序。很多程序只是表面上可以干活,還存在著大量的隱患。當(dāng)然,這其中也有C語(yǔ)言自身的原因。因?yàn)?/p>
5、C語(yǔ)言是一門難以掌握的語(yǔ)言,其靈活的編程方式和語(yǔ)法規(guī)則對(duì)于一個(gè)新手來(lái)說(shuō)很可能會(huì) 成為機(jī)關(guān)重重的陷阱。同時(shí),C語(yǔ)言的定義還并不完全,即使是國(guó)際通用的C語(yǔ)言標(biāo)準(zhǔn),也還存在著很多未完全定義的地方。要求所有的嵌入式程序員都成為C語(yǔ)言專家,避開所有可能帶來(lái)危險(xiǎn)的編程方式,是不現(xiàn)實(shí)的。最好的方法是有一個(gè)針對(duì) 安全性的C語(yǔ)言編程規(guī)范,告訴程序員該如何做。1 MISRAC規(guī)范1994年,在英國(guó)成立了一個(gè)叫做汽車工業(yè)軟件可靠性聯(lián)合會(huì)( The Motor Industry Software Reliability Association ,以下簡(jiǎn)稱 MISRA 的組織。它是致 力于協(xié)助汽車廠商開發(fā)安全可靠的軟件
6、的跨國(guó)協(xié)會(huì),其成員包括: AB汽車電子、羅 孚汽車、賓利汽車、福特汽車、捷豹汽車、路虎公司、Lotus公司、MIRA公司、Ricardo 公司、TRM車電子、利茲大學(xué)和福特 VISTEON氣車系統(tǒng)公司。經(jīng)過(guò)了四年的研究和準(zhǔn)備,MISRAT 1998年發(fā)布了一個(gè)針對(duì)汽車工業(yè)軟件安全 性的C語(yǔ)言編程規(guī)范一一(汽車專用軟件的 C語(yǔ)言編程指南(Guidelines for the Use of the C Language in Vehicle Based Software) ,共有 127 條規(guī)則,稱為 MISRAC:1998 PageC語(yǔ)言并不乏國(guó)際標(biāo)準(zhǔn)。國(guó)際標(biāo)準(zhǔn)化組織(International
7、 Organization of Standardization, 簡(jiǎn)稱ISO)的“標(biāo)準(zhǔn)C語(yǔ)言”經(jīng)歷了從 C90 C96到C99的變動(dòng)。 但是,嵌入式程序員很難將ISO標(biāo)準(zhǔn)當(dāng)作編寫安全代碼的規(guī)范。一是因?yàn)闃?biāo)準(zhǔn)C語(yǔ)言并不是針對(duì)代碼安全的,也并不是專門為嵌入式應(yīng)用設(shè)計(jì)的;二是因?yàn)椤皹?biāo)準(zhǔn) C 語(yǔ)言”太龐大了,很難操作。MISRAC:1998®范的產(chǎn)生恰恰彌補(bǔ)了這方面的空白。隨著很多汽車廠商開始接受MISRA魏程規(guī)范,MISRAC:199也成為汽車工業(yè)中 最為著名的有關(guān)安全性的C語(yǔ)言規(guī)范。2004年,MISRAB版了該規(guī)范的新版本 MISRAC:2004在新版本中,還將面向的對(duì)象由汽車工業(yè)擴(kuò)
8、大到所有的高安全 性要求(Critical )系統(tǒng)。在MISRAC:2004K 共有弓s制規(guī)則121條,推薦規(guī)則20 條,并刪除了 15條舊規(guī)則。任何符合MISRAC:2004S程規(guī)范的代碼都應(yīng)該嚴(yán)格的 遵循121條強(qiáng)制規(guī)則的要求,并應(yīng)該在條件允許的情況下盡可能符合20條推薦規(guī)則。MISRAC:2004等其141條規(guī)則分為21個(gè)類別,每一條規(guī)則對(duì)應(yīng)一條編程準(zhǔn)則。 詳細(xì)情況如表1所列。表 1MISRAC:2004®則分類強(qiáng)制現(xiàn)期推樣分美型制蝴圜雅科近期在選式二:制閶D而句5軌識(shí)符口璃顆if 一 司常顯1L內(nèi)件打心小體4聲明和定式林處四營(yíng)13A(ibn 矣 Wt3最初,MISRAC:19
9、98®程規(guī)范的建立是為了增強(qiáng)汽車工業(yè)軟件的安全性。可能 造成汽車事故的原因有很多,如圖1所示,設(shè)計(jì)和制造時(shí)埋下的隱患約占總數(shù)的15% 其中也包括軟件的設(shè)計(jì)和制造。MISRAC:199僦是為了減小這部分隱患而制定的。MISRA編程規(guī)范的推出迎合了很多汽車廠商的需要,因?yàn)橐坏S商在程序設(shè)計(jì)上出現(xiàn)了問(wèn)題,用來(lái)補(bǔ)救的費(fèi)用將相當(dāng)可觀。1999年7月22日,通用汽車公司(General Motors )就曾經(jīng)因?yàn)槠滠浖O(shè)計(jì)上的一個(gè)問(wèn)題,被迫召回350萬(wàn)輛已經(jīng)出廠的汽車,損失之大可想而知。MISRAO范不僅在汽車工業(yè)開始普及,也同時(shí)影響到了嵌入式開發(fā)的其他方 向。嵌入式實(shí)時(shí)操作系統(tǒng) pC/OSII
10、的2.52版本雖然已經(jīng)于2000年通過(guò)了美國(guó)航 空管理局(FAA的安全認(rèn)證,但2003年作者就根據(jù)MISRAC:199覬范又對(duì)源碼做 了相應(yīng)的修改,如將if (pevent->OSEventTbly &= bitx) = 0) /* */的寫法,改寫成pevent->OSEventTbly &= bitx; if (pevent->OSEventTbly = 0) /* */發(fā)布了 2.62的新版本,并宣稱其源代碼99%符合MISRAC:199覦范。一個(gè)程序能夠符合MISRA魏程規(guī)范,不僅需要程序員按照規(guī)范編程,編譯器 也需要對(duì)所編譯的代碼進(jìn)行規(guī)則檢查。現(xiàn)在,
11、很多編譯器開發(fā)商都對(duì)MISRAO范有了支持,比如IAR的編譯器就提供了對(duì) MISRAC:199覦范127條規(guī)則的檢查功能。2 MISRAC對(duì)安全性的理解MISRAC:2004勺專家們大都來(lái)自于軟件工業(yè)或者汽車工業(yè)的知名公司,規(guī)范的 制定不僅僅像過(guò)去一樣局限于汽車工業(yè)的 C語(yǔ)言編程,同時(shí)還涵蓋了其他高安全性 系統(tǒng)。奧疝投產(chǎn)后變菊可梟;”設(shè)計(jì)劃制選疊裝和圜試圖1汽車事故原因分布圖MISRAC:20041為C程序設(shè)計(jì)中存在的風(fēng)險(xiǎn)可能由5個(gè)方面造成:程序員的失 誤、程序員對(duì)語(yǔ)言的誤解、程序員對(duì)編譯器的誤解、編譯器的錯(cuò)誤和運(yùn)行出錯(cuò) (runtime errors) 。程序員的失誤是司空見慣的。程序員是人
12、,難免會(huì)犯錯(cuò)誤。很多由程序員犯下 的錯(cuò)誤可以被編譯器及時(shí)地糾正(如鍵入錯(cuò)誤的變量名等),但也有很多會(huì)逃過(guò)編 譯器的檢查。相信任何一個(gè)程序員都曾經(jīng)犯過(guò)將“=”誤寫成“二”的錯(cuò)誤,編譯 器可能不會(huì)認(rèn)為if(x=y)是一個(gè)程序員的失誤。再舉個(gè)例子,大家都知道+運(yùn)算符。假如有下面的指令:i=3;printf( "d ,+i);輸出應(yīng)該是多少?如果是:printf( "d ,i+);呢?如果改成-i+呢? i+i呢? i+i呢?絕大多數(shù)程序員恐怕已經(jīng)糊涂了。在MISRAC:2004中,會(huì)明確指出+或-運(yùn)算符不得和其他運(yùn)算符混合使用。C語(yǔ)言非常靈活,它給了程序員非常大的自由。但事情有好
13、有壞,自由越大, 犯錯(cuò)誤的機(jī)會(huì)也就越多。Page如果說(shuō)有些錯(cuò)誤是程序員無(wú)心之失的話,那么因?yàn)槌绦騿T對(duì)C語(yǔ)言本身或是編譯器特性的誤解而造成的錯(cuò)誤就是“明”知故犯了。C語(yǔ)言有一些概念很難掌握,非常容易造成誤解,如表達(dá)式的計(jì)算。請(qǐng)看下面這條語(yǔ)句:if (ishigh && (x = i+)很多程序員認(rèn)為執(zhí)行了這條指令后,i變量的值就會(huì)自動(dòng)加1。但真正的情況如何 呢? MISRA中有一條規(guī)則:邏輯運(yùn)算符&M|的右操作數(shù)不得帶有副作用(side effect ) *,就是為了避免這種情況下可能出現(xiàn)的問(wèn)題。*所謂帶有副作用,就是指執(zhí)行某條語(yǔ)句時(shí)會(huì)改變運(yùn)行環(huán)境,如執(zhí)行 x=i+之后,
14、i 的值會(huì)發(fā)生變化。另外,不同編譯器對(duì)同一語(yǔ)句的處理可能是不一樣的。例如整型變量的長(zhǎng)度, 不同編譯器的規(guī)定就不同。這就要求程序員不僅要清楚C語(yǔ)言本身的特性,還要了解所用的編譯器,難度很大。還有些錯(cuò)誤是由編譯器(或者說(shuō)是編寫編譯器的程序員)本身造成的。這些錯(cuò) 誤往往較難發(fā)現(xiàn),有可能會(huì)一直存留在最后的程序中。運(yùn)行錯(cuò)誤指的是那些在運(yùn)行時(shí)出現(xiàn)的錯(cuò)誤,如除數(shù)等于零、指針地址無(wú)效等問(wèn) 題。運(yùn)行錯(cuò)誤在語(yǔ)法檢查時(shí)一般無(wú)法發(fā)現(xiàn),但一旦發(fā)生很可能導(dǎo)致系統(tǒng)崩潰。例如:#define NULL 0char* p;p=NULL;printf( "Location of 0 is %dn",*p);語(yǔ)
15、法上沒(méi)有任何問(wèn)題,但在某些系統(tǒng)上卻可能運(yùn)行出錯(cuò)。C語(yǔ)言可以產(chǎn)生非常緊湊、高效的代碼,一個(gè)原因就是C語(yǔ)言提供的運(yùn)行錯(cuò)誤檢查功能很少,雖然運(yùn)行效率得以提高,但也降低了系統(tǒng)的安全性。有句話說(shuō)得好,“正確的觀念重于一切"。MISRAO范對(duì)于嵌入式程序員來(lái)講, 一個(gè)很重要的意義就是提供給他們一些建議,讓他們逐漸樹立一些好的編程習(xí)慣和 編程思路,慢慢摒棄那些可能存在風(fēng)險(xiǎn)的編程行為,編寫出更為安全、健壯的代碼。 比如,很多嵌入式程序員都會(huì)忽略注釋的重要性,但這樣的做法會(huì)降低程序的可讀 性,也會(huì)給將來(lái)的維護(hù)和移植帶來(lái)風(fēng)險(xiǎn)。嵌入式程序員經(jīng)常要接觸到各種的編譯器, 而很多C程序在不同編譯器下的處理是不一
16、樣的。MISRAC:2004t一條強(qiáng)制規(guī)則, 要求程序員把所有和編譯器特性相關(guān)的 C語(yǔ)言行為記錄下來(lái)。這樣在程序員做移植 工作時(shí),風(fēng)險(xiǎn)就降低了。3 MISRAC的負(fù)面效應(yīng)程序員可能會(huì)擔(dān)心采用MISRAC:2004m范會(huì)對(duì)他們的程序有負(fù)面影響,比如可 能會(huì)影響代碼量、執(zhí)行效率和程序可讀性等。應(yīng)該說(shuō),這種擔(dān)心不無(wú)道理??v觀141條MISRAC:200毓程規(guī)范,大多數(shù)的規(guī)則并不會(huì)對(duì)程序的代碼量、執(zhí)行效率和可讀 性造成什么大的影響;一部分規(guī)則可能會(huì)以增加存儲(chǔ)器的占用空間為代價(jià)來(lái)增加執(zhí) 行效率,或者增加代碼的可讀性;但是,也確實(shí)存在著一些規(guī)則可能會(huì)降低程序的 執(zhí)行效率。一個(gè)典型的例子就是關(guān)于聯(lián)合體的使用
17、。MISRAC:2004t一條規(guī)則明確指出:不得使用聯(lián)合體。這是因?yàn)?,在?lián)合體的存儲(chǔ)方式(如位填充、對(duì)齊方式、位順序 等)上,各種編譯器的處理可能不同。比如,經(jīng)常會(huì)有程序員這樣做:一邊將采集 得到的數(shù)據(jù)按照某種類型存入一個(gè)聯(lián)合體,而同時(shí)又采用另外一種數(shù)據(jù)類型將該數(shù) 據(jù)讀出。如下面這段程序:typedef unionuint32_t word;uint8_t bytes4;word_msg_t;unit32_t read_word_big_endian (void) word_msg_t tmp;tmp.bytes0 = read_byte();tmp.bytes1 = read_byte();
18、tmp.bytes2 = read_byte();tmp.bytes3 = read_byte();return (tmp.word);原理上,這種聯(lián)合體很像是一個(gè)硬件上的雙口RAM#儲(chǔ)器。但程序員必須清楚,這種做法是有風(fēng)險(xiǎn)的。MISRAC:2004隹薦用下面這種方法來(lái)做:uint32_t read_word_big_endian (void) uint32_t word;word=(unit32_t)read_byte()<<24;Pageword=word|(unit32_t)read_byte()<<16);word=word|(unit32_t)read_byt
19、e()<<8);word=word| (unit32_t)read_byte(); return(word);先不論為什么這樣做會(huì)更安全,只談執(zhí)行效率,這種采用二進(jìn)制數(shù)移位的方法 遠(yuǎn)遠(yuǎn)不如使用聯(lián)合體。到底是使用更安全的做法,還是采用效率更高的做法,需要 程序員權(quán)衡。對(duì)于一些要求執(zhí)行效率很高的系統(tǒng),使用聯(lián)合體仍然是可以接受的方 法。當(dāng)然,這是建立在程序員充分了解所用編譯器的基礎(chǔ)上的,而且程序員必須對(duì) 這種做法配有相應(yīng)的注釋。4發(fā)展中的MISRACMISRA丹非完美,它自身的發(fā)展也印證了這一點(diǎn)MISRAC:200砒去掉了MISRAC:199815條規(guī)則。今后的發(fā)展,MISRAC5然要解
20、決很多問(wèn)題。比如, MISRAC:200鋁基于C90標(biāo)準(zhǔn)的,但最新的國(guó)際 C標(biāo)準(zhǔn)是C99,而C99中沒(méi)有確切 定義的C語(yǔ)言特性幾乎比C90多了一倍,MISRA&口何適應(yīng)新的標(biāo)準(zhǔn)還需要進(jìn)一步探 討。另外,C+軟嵌入式應(yīng)用中也越來(lái)越受到重視,MISRAE在著手制定MISRAC+ 編程規(guī)范。讀者可以通過(guò)訪問(wèn)網(wǎng)站 .uk 了解MISRAC勺發(fā)展 動(dòng)向。5對(duì)MISRAC勺思考嵌入式系統(tǒng)并不算是一個(gè)獨(dú)立的學(xué)科,但作為一個(gè)發(fā)展中的行業(yè),它確實(shí)需要 有一些自己的創(chuàng)新之處。嵌入式工程師們不應(yīng)僅僅局限于從計(jì)算機(jī)專家那里學(xué)習(xí)相 關(guān)理論知識(shí),并運(yùn)用于自己的項(xiàng)目,還應(yīng)該共同努力去完善自己行業(yè)的標(biāo)準(zhǔn)和規(guī)范, 為嵌入式系統(tǒng)的發(fā)展做出貢獻(xiàn)。MISRA編程規(guī)范就是一個(gè)很好的典范。它始于汽車 工程師和軟件工程師經(jīng)驗(yàn)的總結(jié),然后逐漸發(fā)展成為一種對(duì)整個(gè)嵌入式行業(yè)都有指 導(dǎo)意義的規(guī)范。對(duì)于推動(dòng)整個(gè)嵌入式行業(yè)的正規(guī)化發(fā)展,MISRA優(yōu)疑有著重要意義。從另一個(gè)角度講,MISRAO范也可以看成是嵌入式工程師對(duì)軟件業(yè)的一種完 善。嵌入式工程師雖然不是計(jì)算機(jī)專家,但卻對(duì)嵌入式應(yīng)用有著最深刻的了解,將 自己在嵌入式應(yīng)用中的經(jīng)驗(yàn)和體會(huì)貢獻(xiàn)給其他行業(yè),也是他們應(yīng)該肩負(fù)的責(zé)任。參考文獻(xiàn)1 MISRAC:2004, Gui
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 海藻膠提取工安全綜合強(qiáng)化考核試卷含答案
- 會(huì)議接待服務(wù)師安全培訓(xùn)競(jìng)賽考核試卷含答案
- 白酒貯酒工操作技能能力考核試卷含答案
- 玻璃制品裝飾工崗前工作技能考核試卷含答案
- 2024年湖南吉利汽車職業(yè)技術(shù)學(xué)院馬克思主義基本原理概論期末考試題附答案
- 2025年事業(yè)單位招聘考試《《行測(cè)》》真題庫(kù)1套
- 2024年溫州市工人業(yè)余大學(xué)輔導(dǎo)員考試筆試真題匯編附答案
- 2024年紹興理工學(xué)院輔導(dǎo)員招聘?jìng)淇碱}庫(kù)附答案
- 2024年燕京理工學(xué)院輔導(dǎo)員招聘考試真題匯編附答案
- 2024年運(yùn)城市遴選公務(wù)員考試真題匯編附答案
- JJF 1129-2005尿液分析儀校準(zhǔn)規(guī)范
- GB/T 3532-2022日用瓷器
- 八年級(jí)數(shù)學(xué):菱形-菱形的性質(zhì)課件
- 公司業(yè)務(wù)三年發(fā)展規(guī)劃
- 人力資源統(tǒng)計(jì)學(xué)(第二版)新課件頁(yè)
- 神經(jīng)內(nèi)科護(hù)士長(zhǎng)述職報(bào)告,神經(jīng)內(nèi)科護(hù)士長(zhǎng)年終述職報(bào)告
- 某辦公樓室內(nèi)裝飾工程施工設(shè)計(jì)方案
- 高考復(fù)習(xí)反應(yīng)熱
- 小學(xué)生常用急救知識(shí)PPT
- 中考英語(yǔ)選詞填空專項(xiàng)訓(xùn)練
- TOC-李榮貴-XXXX1118
評(píng)論
0/150
提交評(píng)論