/catalog/5b44b7aebbe041098fbfd868e044f805//Document/296736299995205.html/Document/267328648106053.html/Document/267018778099781.html/Document/266676511322181.html/Document/265619597201477.html/Document/235862026059845.html/Document/235543126302789.html/Document/235180874285125.html/Document/234831289405509.html/Document/234475373678661.html/Document/233059773943877.html/Document/232687006150725.html/Document/232354139811909.html/Document/230936619933765.html/Document/230597170643013.html/Document/230237883404357.html/Document/229522033393733.html/Document/228458058801221.html/Document/227760545189957.html/Document/227398664417349.html/Document/227055527931973.html

白盒测试——C/C++编程规范(6)
本系列文章将带大家一起解析一下GJB-8114标准规则,其中一共有124条强制性规则。GJB-8114强制性规则是按类分的,一共有13类,前面的文章已经讲过一部分,本文继续往下进行。

R-1-1-18数组定义禁止没有显式的边界限定

通常的时候我们做数组定义的时候,并不知道要定义多长,就不写我这个边界到底是多大,有多大就自动做成多大。在我们学习C语言或者C++语言的时候这种定义没有任何错误,实际上它是符合C语言的语法的,只不过是不符合GJB-8114的规则。

所以说有时候当我们把程序交给测评机构进行测评的时候,他们会发现违反了很多的规则,给你列出来都有哪些。你一看会觉得,我学的时候都是这样学的呀。实际上语法就是这样,可能你的语法是没问题的,但是却是违反规则的。

就是说必须显式地定义它的长度,不依靠机器或者编译器给它分配长度。但是这里面有一个例外,大家看看遵循示例中举的例子,比如说我们定义指针的数组,就可以定义成两个指向字符串指针的地址。显然没有对每一个字符串的长度没有做限定,对字符串的个数做了限定。

为什么支持这样的呢,我们原来好多做页面的时候要做菜单,菜单最好是这么定义,不能限定死了,尤其是我们还涉及到一些指针的动态分配,所以说这种情况是被允许的。当然我们现在很少有直接写菜单的了,所以严格来说,这样写也不是非常合适的,这里就是我们GJB-8114的举例中有些矛盾的地方。

R-1-1-19禁止使用extern 声明对变量初始化

一个变量初始化可以在声明中进行初始化,但是不允许在外部声明的时候对它进行初始化。也就是说不管在我声明的时候有没有初始化,但是在外部声明的时候都不能做初始化。