C/C++编程教训----'=='判断条件

程序质量保证

个人谈一谈项目代码质量保证主要来源于以下几个方面:

  • 程序员的经验,防御性的避免一些错误/坑。
  • 单元测试单元测试应该是测试中最细粒度的测试,这个测试一般来说贯穿了整个开发以及后期维护;它能够保证到每一个函数/功能的健壮性,从而提高代码的整体质量。
  • 测试自动化: 测试自动化,应该来说至少应该包括了单元测试和功能测试自动化。 在开发或者维护过程中,在修改代码后,能够迅速的使用自动化测试进行验证,从而实现对代码质量的保证。但这里要注意的是,自动化测试用例也要随着问题的发现而不断的增加。
  • 静态代码检查工具:这个除了编程过程中注意编译器给出的警告信息,也可以借助第三方工具进行代码检查,比如CPPLint等。
  • 人工代码审查: 很多代码的漏洞或者问题,只有在运行时特定场景下才会出现,通过静态代码分析工具无法检测。通过人工代码审查一般能够发现这样的问题,比如一个很著名的OpenSSL 漏洞Heartbleed,如果代码有审查机制,也许就能避免这种低级漏洞(但影响很大)。

程序员的经验能够帮助我们在尽可能早的避免可能碰到的坑。而本文或者后面的一些文章,本人也想和大家讨论和风险一些编程教训。

‘==’判断条件

我们先来看一段代码,这段代码的本意是当变量iVal10的时候,调用FunctionA(), 其他情况调用FunctionB(); 眼尖的读者容易发现,程序员却将iVal == 10写成了iVal = 10; 那么无论iVal原来的值为多少,iVal = 10永远条件为真,不会调用FunctionB()

if (iVal = 10)
{
    FunctionA();
}
else
{
    FunctionB();
}

这种语句编译器不错给出错误提示,因为iVal = 10是一条合法的语句。程序员是人,都会犯错误,难免会出现这样的低级错误。那么怎么样避免这种低级错误呢?编程时候,强制自己养成习惯,将 iVal == 10 写成10 == iVal;这样即使程序员不小心写成了10 = iVal编译器也会给出错误提示,从而发现这个笔误。

猜你喜欢

转载自blog.csdn.net/CJF_iceKing/article/details/52317768