1、使用编译器的最高警告级别,成功的构建应该是无声无息的(没有警告的)。
如果确定是无害警告,且是无法修改的第三方头文件引起的,可以用自己的头文件包装起来,并有选择性的关闭警告,然后项目中使用该头文件。
#pragma warning(push) //仅禁用此头文件
#pragma warning(disable:4512)
#pragma warning(disable:4180)
#pragma warning(pop) //恢复最初的警告级别
"未使用的函数参数": 如果是为未来预留的,则删除参数名,只保留参数类型即可去警告。如:
void print(int i, void * /* v */ = 0);
"定义了从未使用过的变量": 可以通过插入一个变量本身的求值表达式,使编译器不再报警,这种求值不会影响运行时速度,如:
void fun() { Lock lock; lock; }
"有符号数/无符号数不匹配": 其实不管怎么样,编译器都会为你插入一个强制转换,同时还会发出警告,因此还不如显式强转一下。
有时编译器会发出烦人甚至虚拟的警告,当遇到这种罕见情形时,作为团队决定可以单独禁用这个警告,但是要尽可能在局部禁用,且编写一个清晰的注释说明为什么禁用。
2、审查代码:更多的关注有助于提高质量。
既能通过同伴的良性压力提高代码质量,又是内部培训的一种极佳方法。