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

R-1-1-20用于数值计算的字符型(短型)变量必须明确定义是有符号还是无符号

在示例中,char是一个标准的类型定义,但是在我们的GJB-8114规则中规定。不允许char这种类型,只能有 unsigned的char或者signed的char。这样可以帮助大家通俗地理解char这个类型是存正数或者存正负数。

R-1-1-21禁止在#include 语句中使用绝对路径

这个一般老的程序员不会犯这种错误,新程序员挺容易犯这种错误的,在写路径的时候就直接指明了是什么目录,就像违背示例中展示的那样,实际上是不允许的。像遵循示例中那样写,好处是什么呢?像违背示例,比如说你的程序,在C盘上运行,可以寻找C盘的目录,如果在D盘上运行,它仍然要找C盘的目录。而遵循示例,会去找当前目录,也就是说我在哪运行就找哪个目录下的东西。所以,考虑到可移植性、可运行性等,禁止用绝对路径来表示。

R-1-1-22禁止头文件重复包含

像违背示例中展示的例子,对文件1做了定义,在文件2中包含了文件1,在实际用的时候,即包含了文件1,也包含了文件2,这样就是重复包含了。这种重复包含往往不容易发现,那怎么办呢?

对于头文件定义.h文件的写法有一个通常的写法,像遵循示例中展示的那样,如果没有定义头文件,我就把头文件定义一下,把内容写进去,在最后用个#endif。文件2中既包含了文件1,又包含了文件2,当我遇到文件2的时候,对它进行解析,发现文件1已经被定义了,直接就到最后了,就不会出现重复包含。

如果大家在头文件中定义的是一些变量,大家会发现在编译器中,违背示例那样是通不过了,如果没有定义变量,只是定了一些宏,那是可以通过的。