CC编程安全标准GJB8114解读

北京治白癜风的专科医院 http://www.t52mall.com/

软件检测实验室在建立软件测试体系或申请cnas/cma相关资质时,需要依据相关标准,使用有效的方法开展检验检测活动,GJB-是一部嵌入式软件安全测试相关的国家标准,本系列文章我们就针对GJB-《C/C++语言编程安全子集》的具体内容进行分析解读。

GJB-标准规则中一共有条强制性规则,是按类分的,一共有13类,声明定义类、版面书写类、指针使用类、分支控制类、跳转控制类、运算处理类、函数调用类、语句使用类、循环控制类、类型转换类、初始化类、比较判断类以及名称、符号与变量使用类。本文我们针对版面书写类进行解读。

版面书写类

R-1-2-1循环体必须用大括号括起来

比如说像违背示例中所展示的,rcode没有用大括号括起来,这样大家一看是不舒服的,所以有人就会把它和for写到一行去,这样是不符合要求的,必须要另起一行,用大括号括起来。

R-1-2-2if、elseif、else必须用大括号括起来

像上面第一条的例子讲的,循环体不止for这一种,还有if、elseif、else的等,这些在我们写程序时,只要是一行,我们就容易把它放到上一行中去,这样显得用的函数更少,更简洁美观,但是现在GJB-要求必须另起一行,用大括号括起来。这个实际上还有一个while循环语句也是这样要求的。

R-1-2-3禁止在头文件前有可执行代码

违背示例中展示的,头文件写到了一个函数里面,或者写到中间都是规则不允许的情况。咱们这个例子举得不是太好,规则中说的是“禁止在头文件前有可执行代码”他放到最前面了,我们通常会认为这样是没有可执行代码,把它放在后面,这个例子就更确切了。不过实际上它放在头文件里面了,也依然是违反规则了。R-1-2-4引起二义性理解的逻辑表达式,必须使用括号显式说明优先级顺序

像违背示例中举的例子,如果a恒等于b,或者a恒等于c,而且a0,这个或和与,到底谁的优先级更高呢?所以要求必须用括号来表达出谁的优先级更高,像遵循示例中展示的,就是先计算或,再计算与。R-1-2-5逻辑判别表达式中的运算项必须要使用括号

像违背示例中展示的,一个变量a0x80的结果是不是等于0x80,它的运算顺序一定是先计算与,然后再判断是否恒等,但是你在看程序的时候,可能会把理解成一个逻辑运算符,就会引起歧义了,所以我们要把计算先括起来,先执行计算,把结果再进行逻辑判别。

R-1-2-6禁止嵌套注释

一般写程序的人都很容易犯这种错误,像违背示例中展示的那样,是我们最早的C语言中的注释方式,/*和*/中间还有/*,这种的就叫嵌套。但是/*和*/中间用//来表示,就不认为是嵌套了。为什么要这样规定呢,因为在我们写程序的过程中,有一个不成文的规定,函数注释要用/*的方式,语句注释要用//的方式,如果我们要把某一个函数注释掉,我们就直接在它前面加一个/*,后面加一个*/就把它注释了,对于里面的注释没有影响。为什么不允许违背示例中那样做呢,在注释一个比较长的文件的时候,我一看前面有一个注释的头/*,我把它删掉,把后面的*/删掉,我会以为这个注释我就可以放开了,可是实际上后面还有一个注释,就会把别的给注释掉了。

后面的文章会继续针对其他大类为大家展开介绍,欢迎继续


转载请注明:http://www.aierlanlan.com/cyrz/5636.html

  • 上一篇文章:
  •   
  • 下一篇文章: