找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

帖子
查看: 3202|回復(fù): 0
收起左側(cè)

MISRA-C-2004-工業(yè)標(biāo)準(zhǔn)的C編程規(guī)范-PDF中文版下載

[復(fù)制鏈接]
ID:394566 發(fā)表于 2021-3-18 11:28 | 顯示全部樓層 |閱讀模式
1 背景 —— C 的使用和問(wèn)題
1.1 汽車工業(yè)中C 的使用
MISRA-C:1998 [1] 發(fā)布于1998 年。本文檔是它的修訂版本,用來(lái)解決與第一版本有關(guān)系的問(wèn)題。


在汽車工業(yè)領(lǐng)域的實(shí)時(shí)嵌入式應(yīng)用中,C 編程語(yǔ)言的使用越來(lái)越體現(xiàn)出廣泛性和重要性。這在相當(dāng)程度上取決于該語(yǔ)言固有的靈活性、可支持的范圍及其潛在的訪問(wèn)廣泛硬件環(huán)境的可移植性。詳細(xì)的理由包括:
  • 對(duì)于許多使用中的微處理器來(lái)說(shuō),如果存在其他除了匯編語(yǔ)言之外的可用語(yǔ)言,通常就是C。在許多情況下,其他語(yǔ)言根本就不可用于硬件。
  • C 對(duì)高速、底層、輸入/輸出操作等提供了很好的支持,而這些特性是許多汽車嵌入式系統(tǒng)的基本特性。
  • 由于應(yīng)用的逐步增長(zhǎng)的復(fù)雜性,高級(jí)語(yǔ)言的使用較匯編語(yǔ)言更為適合。
  • 相對(duì)于其他一些高級(jí)語(yǔ)言,C 能夠產(chǎn)生較小的和較少RAM 密集性(RAM-intensive)的代碼。
  • 增長(zhǎng)的可移植性需求。市場(chǎng)競(jìng)爭(zhēng)要求在工程項(xiàng)目生命周期的任何階段,軟件可以通過(guò)移植到新的和/或低成本的處理器,目的是為了降低硬件成本。
  • 增長(zhǎng)的自動(dòng)產(chǎn)生 C 代碼的使用要求。C 代碼需要從模型包中自動(dòng)產(chǎn)生。
  • 增長(zhǎng)的對(duì)開放系統(tǒng)和主機(jī)環(huán)境(hosted enviroments)的興趣。


1.2 語(yǔ)言的不安全性和C 語(yǔ)言
沒(méi)有哪種編程語(yǔ)言能夠保證最終的可執(zhí)行代碼會(huì)準(zhǔn)確地按照程序員預(yù)想的那樣執(zhí)行。任何語(yǔ)言都會(huì)產(chǎn)生大量的問(wèn)題,下面為其做了廣泛的分類,并描述了C 語(yǔ)言不安全性的例子。


1.2.1 程序員產(chǎn)生錯(cuò)誤
程序員產(chǎn)生的錯(cuò)誤,簡(jiǎn)單的可以是變量名字的書寫錯(cuò)誤,或者更為復(fù)雜的錯(cuò)誤,如對(duì)算法的誤解。編程語(yǔ)言可以承受這樣的錯(cuò)誤。首先,語(yǔ)言的風(fēng)格和表達(dá)能幫助或提示程序員清晰考慮其算法。其次,對(duì)于書寫錯(cuò)誤,語(yǔ)言可以使從一個(gè)有效結(jié)構(gòu)向另一個(gè)有效(不是預(yù)想的)結(jié)構(gòu)的轉(zhuǎn)換變得輕松或困難。第三,當(dāng)錯(cuò)誤發(fā)生時(shí),語(yǔ)言可以檢測(cè)到也可能檢測(cè)不到。

首先,關(guān)于語(yǔ)言的風(fēng)格和表達(dá),使用 C 可以編寫出良好布局的、結(jié)構(gòu)化的和表達(dá)性強(qiáng)的代碼。還可以使用它編寫出不正當(dāng)?shù)暮吞貏e難以理解的代碼。很明顯,后者對(duì)于安全相關(guān)的系統(tǒng)是不可接受的。

其次,C 的語(yǔ)法特性足以使得書寫錯(cuò)誤也能產(chǎn)生完全有效的代碼。例如,在“==”(邏輯比較)的地方寫成“=”(賦值)是很常見(jiàn)的,而且最終結(jié)果也幾乎總是有效的(但它是錯(cuò)誤的);而if 語(yǔ)句的結(jié)尾出現(xiàn)的多余分號(hào)能完全改變代碼邏輯。

第三,C 的基本觀點(diǎn)是假設(shè)程序員知道他們?cè)谧鍪裁�,這意味著錯(cuò)誤即使出現(xiàn)也不會(huì)被語(yǔ)言注意到而通過(guò)。在這方面C 體現(xiàn)出的軟弱性正在于它的“書寫檢查”(type checking)。舉例來(lái)說(shuō),C 不會(huì)拒絕程序員在使用整數(shù)代表true/false 值時(shí)卻在該整數(shù)中存儲(chǔ)了浮點(diǎn)值。大多數(shù)這樣的失配可以簡(jiǎn)單地通過(guò)強(qiáng)制使其合適。如果C 的表現(xiàn)不得其所(a square peg and a round),它不會(huì)挑剔而會(huì)適合它們!


1.2.2 程序員不了解語(yǔ)言
程序員可能會(huì)誤解語(yǔ)言構(gòu)造的作用。對(duì)這樣的誤解,一些語(yǔ)言是更為開放的。
C 語(yǔ)言中有相當(dāng)多的地方能使程序員輕易產(chǎn)生誤解。例如運(yùn)算符優(yōu)先級(jí)的規(guī)則。這些規(guī)則是良好定義的,但也非常復(fù)雜,也很容易對(duì)某特定表達(dá)式中運(yùn)算符的優(yōu)先級(jí)做出錯(cuò)誤的假設(shè)。

1616037964(1).jpg

1616038009(1).jpg



MISRA-C-2004-工業(yè)標(biāo)準(zhǔn)的C編程規(guī)范-中文版.pdf

455.63 KB, 下載次數(shù): 43, 下載積分: 黑幣 -5

MISRA-C-2004-工業(yè)標(biāo)準(zhǔn)的C編程規(guī)范

評(píng)分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎(jiǎng)勵(lì)!

查看全部評(píng)分

回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表