



版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2009-10-27嵌入式在線收藏|打印在嵌入式系統(tǒng)的軟件設(shè)計中,“匯編語言 +C 語言 ”早已成為理所當然的經(jīng)典組合。的確,對于硬件配置來說,匯編語言清晰明了;對于上層設(shè)計來說,C 語言緊湊高效。這樣的搭配能夠滿足大多數(shù)傳統(tǒng)嵌入式系統(tǒng)應用的需要。隨著技術(shù)水平的提高,今天的嵌入式系統(tǒng)也比過去更加深入到人們的日常生活中,大到汽車、飛機、火箭,小到手機、打印機、鬧鐘、手表,都可以找到嵌入式系統(tǒng)的蹤影。然而,這看似一成不變的情況,也在悄然轉(zhuǎn)變。隨著網(wǎng)絡、多媒體等技術(shù)的出現(xiàn)、發(fā)展與普及,對嵌入式系統(tǒng)應用有了新的要求,也給了其他高級語言,特別是C+ 語言以機會。由此帶來的在語言使用中的安全問題,目前雖然
2、還未凸顯,但根據(jù)以往的經(jīng)驗來看,終將成為限制行業(yè)發(fā)展的新瓶頸。已有的C+ 語言國際標準雖然龐大細致,但作為一個“語言標準 ”,只能是盡力做得面面俱到,其目標在于構(gòu)造一個語句合法性的權(quán)威依據(jù),以約束人們對于 C+ 的使用。但它并不是針對應用而寫的規(guī)范,對于可能遇到的安全性問題也無法進行特別深入的探討,更加沒有安全方面的實踐經(jīng)驗支撐。一個針對安全方面的、被國際所認可的使用規(guī)范,無疑是C+ 語言在嵌入式系統(tǒng)中得到廣泛應用的堅實基礎(chǔ)與助推劑。1 C+ 在嵌入式應用中的機遇與挑戰(zhàn)C+ 作為一門高級語言,人們在提及它時,總難免會談到C 語言。直至今天,很多人對于 C+ 語言的認識依然是“C語言的超集 ”。
3、這是因為C+ 的起源與C 語言有著千絲萬縷的聯(lián)系。1978 年,美國貝爾實驗室的Dennis Ritchie 和 BrianKernighan 在 BCPL 以及其簡化版本 B 語言的基礎(chǔ)之上開發(fā)了C 語言,并合作出版了 The C ProgrammingLan-guage 。C 語言迅速得到了大家的認可,并廣為流傳。1989 年, ANSI 推出了第一個C 語言的標準 X3 159-1989 ,并被 ISO 采納,隨之發(fā)布。 ISO IEC 9899-1990 。早在 C 語言標準發(fā)布之前,貝爾實驗室的BjarneStroustrup就致力于在 C 語言里增加類、函數(shù)類型檢查以及其他的一些優(yōu)
4、秀特征,于1980年發(fā)布 “Cwith Classes ”。經(jīng)過持續(xù)的努力,他最終完成了對 C 語言的改造,由此創(chuàng)生出一門新語言 C+ ,并出版了 The C+ProgrammingLanguage 一書。由于它帶來了持續(xù)的影響,ISO 于 1998 年發(fā)布 ISO IEC 14882 :1998;幾乎同一時間, ANSI也發(fā)布了類似標準,這標志著C+ 作為一門獨立語言的標準化得到了官方的認可。統(tǒng)計數(shù)據(jù)表明,日常生活中一個美國人平均占用 8 個微控制器,這些都離不開嵌入式系統(tǒng)的應用。 然而嵌入式系統(tǒng)軟件技術(shù)似乎落后于當前的軟件發(fā)展形勢, 近年來才逐漸由匯編語言過渡到面向過程的 C 語言。但對于
5、面向?qū)ο笳Z言的應用還很有限。這一方面是由于嵌入式開發(fā)人員多年來應付有限資源的經(jīng)驗而養(yǎng)成的保守態(tài)度,面也是由于長久以來,嵌入式系統(tǒng)應用設(shè)計中,人們要花費許多精力在底層硬件的驅(qū)動上,功能實現(xiàn)也主要局限在實時操作系統(tǒng)和相關(guān)支撐軟件的層次,并不涉及過多的應用軟件開發(fā)。這種在嚴苛條件下追求效率與實時性的任務,其他的高級語言并沒有特別的優(yōu)勢。另一方最近幾年,嵌入式系統(tǒng)領(lǐng)域又有了新的發(fā)展。首先,隨著手機、PDA 等消費性電子產(chǎn)品的飛速增長, 嵌入式系統(tǒng)的市場規(guī)模在迅速擴大,同時越來越多的智能嵌入式應用場合需要互聯(lián)網(wǎng)的支持,這要求嵌入式系統(tǒng)的軟件具有更好的應用性和更高的復雜性;其次,隨著芯片等相關(guān)領(lǐng)域的技術(shù)進
6、步,嵌入式系統(tǒng)工程師們不再需要時時刻刻去考慮資源是否夠用了。當面向?qū)ο蟮母呒壵Z言參與到嵌入式系統(tǒng)設(shè)計中去不再遙不可及時,語言的效率則成為突出的問題。根據(jù)Thinkingin C+ 一書的總結(jié),C+ 與 C 的效率差別往往在±5,這使得 C+ 在新一輪的嵌入式應用發(fā)展浪潮中占得先機。值得注意的是, 盡管自1998年發(fā)布最初的C+ 標準 ISO IEC 14882 :1998以來,每 5 年都會對此標準進行一次更新,但是由于C+ 語言過于復雜,以及它經(jīng)歷了長年的演變,直到2004 年,沒有任何一款編譯器完全支持ISO C+ 。這對于時常要面對各種嚴苛條件的嵌入式系統(tǒng)應用工程師們來說,是難
7、以忍受的。同時,即使是符合ISOC+ 標準的語句或者格式, 對于實際的應用場合來說,也存在著重大隱患,而不應當被直接采用。因此,人們迫切需要一個正式的基于安全角度考慮的C+ 語言使用規(guī)范。2 關(guān)于 MISRAMISRA(theMotorIndustrySoftwareReliabilityAs-sociation),即汽車工業(yè)軟件可靠性協(xié)會,于1994 年在英國成立,以“協(xié)助汽車工業(yè)提供安全、可靠的軟件”為使命,期望通過 “規(guī)范指南 ”的形式來約束人們在汽車電子以及其他嵌入式系統(tǒng)開發(fā)領(lǐng)域或涉及安全與可靠性的領(lǐng)域中對于程序語言的使用。由于這些 “規(guī)范指南 ”都是從大量工程實踐中總結(jié)的第一手經(jīng)驗,
8、因而具有極高的指導意義。經(jīng)過 4 年準備,它在1998 年發(fā)布了一個針對汽車工業(yè)的Guidelinesfor the Useofthe C Langtlagein VehicleBasedSoftware ,簡稱 “ MISRA C: 1998' ,針對那些滿足C 語言標準, 卻存在安全隱患的語言使用習慣,提出了 127 條規(guī)則。 由于它很好地解決了C語言國際標準的冗繁性,以及其中對于安全性考慮的不足性,從而得到了廣泛的好評。MISRA-C 不僅成為眾多汽車廠商推崇的行業(yè)標準,其影響力更是遠遠超出了汽車工業(yè),得到鐵路、航空航天、國防、醫(yī)療等眾多領(lǐng)域的認可,成為“最佳實踐 ”解決方案。2
9、004年, MISRA對于已有的規(guī)則進行改編與擴充,推出了“ MISRA C 2004”,首次將該規(guī)范指南的對象從汽車工業(yè)推廣到所有具有安全性要求的系統(tǒng)應用中去,包含了強制規(guī)則121 條,推薦規(guī)則20 條,并刪除了15 條舊規(guī)則,共計含有141 條規(guī)則。時至今日, MISRA 組織不僅是汽車工業(yè)軟件規(guī)范的權(quán)威,其制定的規(guī)范指南更得到了嵌入式系統(tǒng)應用領(lǐng)域的廣泛認可。考慮到近年來, C+ 語言在嵌入式系統(tǒng)中的應用越來越多,2005年 MISRAC+ 委員會成立,并于2008 年推出針對C+ 語言的 MISRAC+ : 2008 Guidelinesfor the USeof the C+langu
10、agein criticalsys-tems>>,以下簡稱 “MISRAC+ : 2008”。有興趣的讀者可以聯(lián)系相關(guān)網(wǎng)站:http : www misra-cpp com,購買詳細的文檔。MISRAC+ :2008同樣從推出之日起,就得到了業(yè)內(nèi)外廣泛關(guān)注。例如:LDRA軟件公司一直跟蹤著MIS-RAC+ :2008 的制定進展, 在 MISRAC+ :2008 發(fā)布時同步宣稱已經(jīng)完成了對工具套件產(chǎn)品的相應改進,使其符合MISRAC+ :2008 標準。 (LDRA 的estbed 產(chǎn)品曾成功用于“神舟 ”飛船項目的軟件測試)T3 MISRAC+ 概述作為規(guī)范指南,MISRAC+
11、: 2008基于ISO IEC 14882 : 2003的C+ 語言國際標準,以規(guī)則(rule) 的形式,給出了相關(guān)的建議。它的規(guī)則又細分為以下3 種類型:強制型 (required) ,必須符合、允許例外;推薦型 (advisory) ,推薦符合;不容討論型(document) ,必須符合、不許例外。MISRAC+ :2008 中共給出了20 個大類的規(guī)則(編號并不連續(xù)),細分為228 條。詳細情況如表1 所列。文檔中所有規(guī)則的書寫格式如下:每條規(guī)則之后都有詳細的解釋,并給出了一些具體的程序語句作為例子。下面分別針對上述 3 種規(guī)則類別,進行舉例說明。規(guī)則 0-1-1( 強制 )工程中不允許
12、包含無法觸及的代碼上述例子里,條件判斷中的賦值語句和 return 語句之后的自增語句都是在任何條件下都無法觸及的死代碼,不允許這樣使用。規(guī)則 0-1-2(強制 ) 工程中不允許含有永遠不會被執(zhí)行的路徑enumecRED ,BLUE ,GREEN)col ;if(col<=GREEN)不符合規(guī)則,條件永遠為真 Willalwaysget , hereelse代碼永遠不會到達這里由于枚舉類型有默認的初始賦值 0 ,1,2 , ,故 col 永遠 GREEN。上述例子中,含有任何條件下都不會被執(zhí)行的路徑,不允許這樣使用。規(guī)則 5-2-10( 推薦 ) 自增 (+) 自減 (-) 運算符不應與
13、表達式中其他運算符混合使用諸如下面的例程將導致理解上的混淆以及結(jié)果的不確定,在程序設(shè)計時應盡可能避免。u8a=+u8b+u8c-; 不符合規(guī)則規(guī)則 0-4-2(不容討論 ) 對于浮點運算(floating-point)算法的使用,必須給出記錄安全的使用浮點算法需要具有較高的數(shù)字分析技能和對編譯器及硬件對象的深入了解。因此在使用浮點算法時, 必須先進行分析:是否必須使用它、 采取的方法是否可行、過程是否得到了正確的執(zhí)行,并將上述結(jié)果做出記錄。規(guī)則 16-6-1(不容討論 ) 所有的庫函數(shù)代碼必須符合MISRAC+上述這些例子只是為了讓大家對 MISRA C+ : 2008 的 3 種規(guī)則有一定的
14、認識,我們會結(jié)合相關(guān)內(nèi)容, 在接下來的幾篇文章中進一步討論學習。 不難發(fā)現(xiàn), 許多違反了 MISRA C+ : 2008 中規(guī)則的例程都是符合 C+ 語言標準的,但出于安全性考慮,應當被禁止或者謹慎使用。通覽之后,往往會發(fā)現(xiàn)自己平時從未注意的一些編程習慣,都已經(jīng)被嚴令禁止。它們有些是明顯有礙安全性的,有些則相對隱蔽。然而MISRA的號召力是不容小覷的。以嵌入式實時操作系統(tǒng)C OS-II為例,其2 52 版本雖然已經(jīng)于2000 年通過了美國航空管理局(FAA) 的安全認證,但2003年 C OS-II 的作者就根據(jù)MISRAC:1998規(guī)范又對源碼作了相應的修改,并發(fā)布了2 62的新版本,宣稱其
15、源代碼99 符合 MISRAC: 1998的要求。4 安全性問題對于安全性, MISRA 給出以下 5 種可能的安全問題來源:開發(fā)人員的錯誤、開發(fā)人員對于語言的誤解、編譯器沒有按照開發(fā)人員的預期工作、編譯器本身含有錯誤、運行錯誤。這些錯誤的來源與實際使用的是何種計算機語言沒有關(guān)系, 可以說比較全面地包含了嵌入式系統(tǒng)開發(fā)以及其他相關(guān)的軟件設(shè)計中可能導致安全問題的所有渠道。作為 C+ 這樣一門面向?qū)ο蟮母呒壵Z言(由于其與 C 的淵源,嚴格地說,C+ 是具有某些面向?qū)ο筇卣鞯倪^程語言),通過類、函數(shù)參數(shù)類型檢查、模版、異常處理以及派生、繼承、多態(tài)等手段,使得其在保有高效率的同時,實現(xiàn)了強大的功能,并
16、帶來了自頂向下的模塊化程序設(shè)計理念。但編程靈活度的提高,也令其代碼復雜而易錯。與C 語言相比,它所面對的安全問題將更為隱蔽,更加難以發(fā)現(xiàn)。但就對數(shù)據(jù)的封裝而言,C+ 遠遠優(yōu)于C,只要參照合理的規(guī)范指南,進行項目的開發(fā),就可以通過充分發(fā)揮C+ 靈活的特點,應用到更多更廣的工程領(lǐng)域。5 行業(yè)展望標準與規(guī)范從來沒有如眼下這般備受重視過。一個權(quán)威的標準或規(guī)范,不僅將成為相關(guān)領(lǐng)域的 “金科玉律 ”,更是行業(yè)動向的風向標。可以說正是由于 MISRA-C 的存在,使得在高級語言種類繁多的今天, C 語言的地位依然無可替代。此次 MISRA 攜著在 C 語言上的巨大成功,選擇了 C+ 語言進行新的規(guī)范化嘗試,
17、不僅因為 C+ 語言的群眾基礎(chǔ)深厚,更是表明了嵌入式系統(tǒng)領(lǐng)域內(nèi)大多數(shù)專家的觀點:如果說未來能有一門語言取代目前C 語言在嵌入式系統(tǒng)應用中的地位的話,也只能是C+ 語言。一名成功的嵌入式系統(tǒng)工程師,必須是對行業(yè)動向極為敏感的,也只有這樣, 才能在知識爆炸的今天緊跟時代潮流。從使用C 語言到使用C+ 語言是一個巨大的跨越,決不僅僅像使用“增強的 C”那么簡單,需要從現(xiàn)在就開始學習。而從學習之初就養(yǎng)成的良好的語言使用習慣,將決定將來進階的速度與可能性。MISRAC+ :2008 無疑是培養(yǎng)這樣良好習慣的最佳手冊MISRA-C:2004靜態(tài)分析2008-02-20 13:57閱讀 78評論 0字號:大
18、中小MISRA ( The MotorIndustrySoftwareReliabilityAssociation汽車工業(yè)軟件可靠性協(xié)會)MISRA 是汽車工業(yè)C 語言編程指導,是目前公認的最優(yōu)秀的嵌入式C 語言的編碼規(guī)范,在航空/ 航天、汽車、醫(yī)療、船舶、電信等對軟件安全性要求比較高的行業(yè)得到了廣泛的應用。在 1998 年版的基礎(chǔ)上, MISRA 組織最新發(fā)布了 MISRA-C:2004MISRA-C:2004包括 141 條規(guī)則,其中121 條是強制( Required )遵守的, 20 條是建議( Advisory)遵守的。 MISRA 官方網(wǎng)站: .ukMIS
19、RA 規(guī)則的詳細內(nèi)容需要購買,印刷版本價格$76 ,電子版本( PDF )價格 10.全部 141 條規(guī)則的中英文對照如下,請參考。在以后的日子里,我還會陸續(xù)寫一些文章,來介紹某些規(guī)則的必要性。11.1所有代碼必須符合ISO 9899:1990標準( C 編程語言標準)。All codeshallconformto ISO 9899:1990'Programminglanguages- C'1.2軟件不可依靠未定義或未指明的行為。(未指明的行為會產(chǎn)生不可靠性)No relianceshallbe placedon undefinedor unspecifiedbehaviour
20、;1.3只有當目標代碼的一般定義界面標準和語言/ 編譯器 /匯編器相一致的時候才能使用多種編譯器和/ 或多種語言。Multiplecompilersand/orlanguagesshallonlybe usedif thereis a commondefinedinterface standardfor objectcode towhichthe language/compilers/assemblersconform;1.4編譯器、連接器和標識符不能支持超過31 個字符的有效性。The compiler/linker/Identifiers(internaland external)shal
21、lnot rely on significanceof morethan 31 characters.;1.5浮點執(zhí)行應該符合明確的浮點標準。Floatingpointimplementationsshouldcomplywith a definedfloatingpoint standard;22.1應該封裝并隔離匯編語言。Assemblylanguageshallbe encapsulatedandisolated;2.2在源代碼中應該只使用 /* . */ 的注釋風格。Sourcecodeshall onlyuse /* .*/ stylecomments;2.3在注釋中不可以使用 /*
22、。The charactersequence/* shallnotbe usedwithina comment;2.4不可以注釋掉部分代碼。Sectionsof code shouldnotbe 'commentedout'32.1必須記錄所有與使用執(zhí)行定義程序有關(guān)的行為。All usageof implementation-definedbehaviourshallbe documented;2.2必須記錄字符集與其編碼。The characterset andthe correspondingencodingshallbe documented;2.3應該確定、記錄并考慮選
23、定編譯器中的整數(shù)除法。The implementationof integer division in the chosen compiler should be determined, docum ented and taken into account.;2.4必須記錄并解譯所有 #pragma指示的使用。All uses of the#pragmadirectiveshallbe documentedandexplained.;2.5如果代碼使用位域,則必須紀錄位段的執(zhí)行定義行為與位段的組裝。The implementation-definedbehaviourand packingof
24、 bitfieldsshall be documentedif beingreliedupon;2.6所有執(zhí)行代碼使用的程序庫必須符合本文件的規(guī)定,并必須經(jīng)過適當?shù)拇_認。All librariesused in production code shall be written to comply with the provisions of this d ocument, and shall have been subject to appropriate validation.;44.1 只可使用國際標準化組織(ISO ) C 語言標準定義的轉(zhuǎn)義-序列。Onlythoseescapesequ
25、enceswhicharedefinedin the ISO C standardshall be used.;3.2不可使用三符組(?x )。Trigraphsshallnot be used.;55.1內(nèi)外標識符不能支持超過31 個字符的有效性。Identifiers(internalandexternal)shallnotrely on thesignificanceof morethan 31 characters;5.2內(nèi)層范圍標識符不可與外層范圍標識符同名,否則會屏蔽那個標識符。Identifiersin an innerscopeshallnot usethe samenamea
26、s an identifierin an outer scope, and thereforehide that identifier.;5.3 Typedef的名字必須使用唯一的標識符。A typedefnameshallbe a uniqueidentifier.;5.4 一個標記符只能用于唯一的標識符。A tag nameshall be a uniqueidentifier;5.5 不應該重用帶有靜態(tài)存儲的對象或函數(shù)標識符。No objector functionidentifierwithstaticstoragedurationshouldbe reused;5.6一個名字空間的標
27、識符不可以與別的名字空間的標識符同名,結(jié)構(gòu)體和聯(lián)合體的成員名除外。No identifier in one name space should have the same spelling as an identifier in another name space, with the exception of structure and union member names;5.7標識符名字不可以重用。No identifiernameshouldbe reused;66.1“ char型”的變量只能用于字符值的存儲和使用。The typechar shall be usedonly for
28、 storageand useof charactervalues;6.2 有符號和無符號的“ char型”變量只能用于數(shù)值的存儲和使用。Signedand unsignedchartype shall be usedonlyfor the storageand use of numericvalues;6.3基本類型應該用指示大小和有無符號的typedef 來代替。Typedefsthatindicatesizeand signednessshouldbe usedin placeof the basictypes;6.4 位域只能被定義為無符號整型或有符號整型。Bit fieldsshal
29、lonly be definedto be of typeunsignedint or signedint.;6.5使用有符號整型的位域的大小必須至少是2 位。Bit fields of type signedint shallbe at least2 bits long.;77.1不要使用 “零”以外的八進制常量與八進制的轉(zhuǎn)義序列(octalescapesequence) 。Octalconstants(otherthan zero)and octalescapesequencesshall notbe used.;88.1函數(shù)必須有原型聲明,原型對于函數(shù)的定義和調(diào)用必須是可見的。Funct
30、ionsshall haveprototypedeclarationsand theprototypeshallbe visibleat boththefunctiondefinitionandcall.;8.2 當聲明或定義對象或函數(shù)的時候,必須明確規(guī)定它的類型。Wheneveran objector functionis declaredor defined,its type shallbe explicitlystated;8.3對于每個函數(shù)的參數(shù)來說,聲明和定義中給出的類型必須一致,返回類型也必須一致。For each functionparameterthe type givenin
31、 thedeclarationand definitionshall be identical,and thereturntypesshallalsobe identical.;8.4如果對象或函數(shù)被生命多次,類型必須是兼容的。If objectsor functionsaredeclaredmorethanonce theirtypesshallbe compatible.;8.5在頭文件中不能有對象或函數(shù)的聲明。Thereshallbe no definitionsof objectsor functionsin a headerfile;8.6函數(shù)必須在文件范圍內(nèi)聲明。Functions
32、shallalwaysbe declaredat file scope.;8.7如果對象只在單個函數(shù)中被訪問,那么它們必須在程序塊中定義。Objectsshall be defined at block scope if they are only accessed from within a single funct ion;8.8外部對象或外部函數(shù)只可以在一個文件中定義,并且只能在一個文件中定義。An externalobjector functionshallbe declaredin onefile and only onefile;8.9有外部鏈接的標識符必須只有一個外部定義。An
33、identifierwith externallinkageshall haveexactlyone externaldefinition.;8.10所有文件范圍的對象或函數(shù)聲明都必須有內(nèi)部鏈接,除非必需外部鏈接。All declarationsand definitions of objects or functions at file scope shall have internal linkag e unless external linkage is required;8.11在有內(nèi)部鏈接的對象和函數(shù)的定義和聲明中必須使用靜態(tài)存儲類說明符。The staticstorageclass
34、 specifiershallbe used in definitionsanddeclarationsof objectsand functionsthat have internallinkage;8.12當聲明一個有外部鏈接的數(shù)組時,必須通過初始化明確規(guī)定或隱式定義它的大小。Whenanarrayis declaredwithexternallinkage,its size shallbe statedexplicitlyor definedimplicitlyby initialisation;99.1所有自動變量在使用前必須配值。All automaticvariablesshall
35、have beenassigneda valuebeforebeingused.;9.2在結(jié)構(gòu)體與數(shù)組非零的初始化中,必須使用花括號來指示和匹配結(jié)構(gòu)。Bracesshall be used toindicate and match the structure in the non-zero initialization ays and structures.;of arr9.3 在枚舉表中,不可以用'=' 結(jié)構(gòu)來明確初始化除第一個成員以外的其他成員,除非所有條目都被明確初始化。In an enumerator list, the '=' construct sh
36、all not be used to explicitly initialise members er than the first, unless all items are explicitly initialised.;oth1010.1整數(shù)類型表達式的值不可以被隱式地轉(zhuǎn)換為別的基本類型。The valueof an expression of integer type shall not be implicitly converted to a different u nderlying type;10.2浮點類型表達式的值不可以被隱式地轉(zhuǎn)換為別的類型。The valueof an e
37、xpression of floating type shall not be implicitly converted to a different ty pe;10.3整數(shù)類型的復雜表達式的值只可能被轉(zhuǎn)換為比它更有限的具有和表達式的基本類型相同符號的類型。Thevalue of a complex expression of integer type may only be cast to a type that is narr ower and of the same signedness as the underlying type of the expression;10.4浮點類型
38、的復雜表達式的值只可以被轉(zhuǎn)換為比其更有限的浮點類型。The valueof a complexexpressionof float type may only be cast to narrower floating typ e;10.5如果位操作符 '' 和'<<' 應用于基本類型無符號字符型或無符號短整型的操作數(shù),結(jié)果會立即轉(zhuǎn)換成操作數(shù)的基本類型。If the bitwise operator and << are applied to an operand of underlying type unsigned cha r or u
39、nsigned short, the result shall be immediatly cast to the underlying type of the operand;10.6無符號類型的所有常量都必須加上后綴'U' 。The 'U' suffix shallbe appliedto all constantsof unsignedtypes;1111.1 指向函數(shù)的指針不能轉(zhuǎn)換成除整型以外的任何其他類型。Conversionshall not be performed between a pointer to a function and any t
40、ype other than an integral type;11.2 指向?qū)ο蟮闹羔槻荒苻D(zhuǎn)換成除整型、另一個指向?qū)ο蟮闹羔樆蛑赶騰oid 的指針以外的任何其他指針。Conversion shall not be performed between a pointer to an object and any type other than an integral type, another pointer to a object type or a pointer to void;11.3不可以進行指針類型和整數(shù)類型之間的類型轉(zhuǎn)換。A castshouldnotbe performedbe
41、tweena pointertypeand an integraltype;11.4 不可以進行一對象指針和另一對象之間的類型轉(zhuǎn)換。A castshould not be performed between a pointer to object type and a different pointer to object type;11.5 不可以進行從通過指針訪問的類型中移除任何不變或可變限定條件的轉(zhuǎn)換。A castshall not be performed that removes any const or volatile qualification from the type ad
42、dressed by a pointer;1212.1在表達式中, C 操作符的優(yōu)先規(guī)則應該設(shè)置限制相關(guān)性。Limiteddependenceshouldbe placedon C's operatorprecedencerulesin expressions.;12.2在標準允許的任何賦值順序下表達式的值都必須相等。The valueof an expressionshall be the same under any order of evaluation that the stand ard permits.;12.3含有副作用的表達式中應該不使用sizeof 操作符。Thesi
43、zeofoperatorshouldnot be used on expressionsthat containsideeffects.;12.4邏輯 '&&' 或邏輯 '|'操作符的右操作數(shù)不能含有副作用。The righthand operandof a logical&& or | operatorshallnotcontainsideeffects.;12.5邏輯 &&或 |的操作數(shù)必須是基本表達式。The operandsof a logical&& or | shall be prima
44、ry-expressions.;12.6邏輯操作符 (&&,| 和!)的操作數(shù)應該是有效的布爾變量。有效的布爾表達式不可以被作為除了(&&,| 和!) 以外的其他操作符的操作數(shù)來使用。The operands of a logical operators (&&, | and !) should be effectively ns that are effectively Boolean should not be used as operands to operators and !).;Boolean. Expressio other tha
45、n (&&, |12.7位操作符不能應用于基本類型是有符號類型的操作數(shù)。Bitwiseoperatorsshallnotbe appliedto operandswhoseunderlyingtype is signed;12.8位移操作符的右操作數(shù)必須間于零和一個比左操作數(shù)的基本類型的位寬更小的數(shù)之間。The righthand operandof a shift operatorshalllie betweenzeroand one lessthanthe widthin bits of the underlyingtype of theleft handoperand.;
46、12.9一元減法操作符不可以被應用于基本類型為無符號型的表達式。The unaryminus operator shall not be applied to an expression whose underlying type is u nsigned.;12.10不可以使用逗號操作符。The commaoperatorshall not be used.;12.11無符號整型常量表達式的賦值不應該導致回轉(zhuǎn)。Evaluationof constantunsignedintegerexpressionsshouldnotleadto wrap-around.;12.12不可以用浮點值的基本比特表示法。The underlyingbit representationsof floating-pointvaluesshallnotbe used.;12.13在表達式中遞增(+) 和遞減 (-) 操作符不能與其他操作符混合使用。The increment(+) anddecrement(-) operatorsshouldnotbe mixedwithotheroperatorsin an expression;1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 網(wǎng)絡系統(tǒng)運維管理制度
- 聯(lián)網(wǎng)技防公司管理制度
- 統(tǒng)計預算業(yè)務管理制度
- 幼兒護校隊管理制度
- 樂樂茶薪酬管理制度
- 移動存儲介質(zhì)管理制度
- 市場經(jīng)營類管理制度
- 一制毒試劑管理制度
- 電話銷售設(shè)備管理制度
- 產(chǎn)品ntf管理制度
- 2024年中國建筑西南勘察設(shè)計研究院有限公司招聘筆試參考題庫含答案解析
- DG-TJ08-2433A-2023 外墻保溫一體化系統(tǒng)應用技術(shù)標準(預制混凝土反打保溫外墻)
- 教師法制教育培訓課件
- 眾包物流模式下的資源整合與分配
- 鐵路貨運流程課件
- 四川省成都市成華區(qū)2023-2024學年七年級上學期期末數(shù)學試題(含答案)
- 慢性硬膜下血腫護理要點大揭秘
- 管工基礎(chǔ)知識培訓課件
- 成人氣管切開拔管中國專家共識解讀
- “微”力量微博營銷
- 2022-2023學年山東省菏澤市成武縣人教版四年級下冊期末考試數(shù)學試卷(解析版)
評論
0/150
提交評論