C++在嵌入式应用中的安全问题
文档中所有规则的书写格式如下:
每条规则之后都有详细的解释,并给出了一些具体的程序语句作为例子。下面分别针对上述3种规则类别,进行举例说明。
规则0-1-1(强制)工程中不允许包含无法触及的代码
上述例子里,条件判断中的赋值语句和return语句之后的自增语句都是在任何条件下都无法触及的死代码,不允许这样使用。
规则0-1-2 (强制) 工程中不允许含有永远不会被执行的路径
enum ec{RED,BLUE,GREEN)col;
if(col=GREEN) //不符合规则,条件永远为真
{
//Will always get,here
}
else
{
//代码永远不会到达这里
}
由于枚举类型有默认的初始赋值0,1,2,…,故col永远≤GREEN。上述例子中,含有任何条件下都不会被执行的路径,不允许这样使用。
规则5-2-10(推荐) 自增(++)/自减(--)运算符不应与表达式中其他运算符混合使用诸如下面的例程将导致理解上的混淆以及结果的不确定,在程序设计时应尽可能避免。
u8a=++u8b+u8c-; //不符合规则
规则0-4-2 (不容讨论) 对于浮点运算(floating-point)算法的使用,必须给出记录
安全的使用浮点算法需要具有较高的数字分析技能和对编译器及硬件对象的深入了解。因此在使用浮点算法时,必须先进行分析:是否必须使用它、采取的方法是否可行、过程是否得到了正确的执行,并将上述结果做出记录。
linux操作系统文章专题:linux操作系统详解(linux不再难懂)
评论