C++在嵌入式應(yīng)用中的安全問題
文檔中所有規(guī)則的書寫格式如下:
每條規(guī)則之后都有詳細(xì)的解釋,并給出了一些具體的程序語句作為例子。下面分別針對(duì)上述3種規(guī)則類別,進(jìn)行舉例說明。
規(guī)則0-1-1(強(qiáng)制)工程中不允許包含無法觸及的代碼
上述例子里,條件判斷中的賦值語句和return語句之后的自增語句都是在任何條件下都無法觸及的死代碼,不允許這樣使用。
規(guī)則0-1-2 (強(qiáng)制) 工程中不允許含有永遠(yuǎn)不會(huì)被執(zhí)行的路徑
enum ec{RED,BLUE,GREEN)col;
if(col=GREEN) //不符合規(guī)則,條件永遠(yuǎn)為真
{
?。疻ill always get,here
}
else
{
?。a永遠(yuǎn)不會(huì)到達(dá)這里
}
由于枚舉類型有默認(rèn)的初始賦值0,1,2,…,故col永遠(yuǎn)≤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)行分析:是否必須使用它、采取的方法是否可行、過程是否得到了正確的執(zhí)行,并將上述結(jié)果做出記錄。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評(píng)論