破除匪夷所思bugs,从修正编译警告开始

50 篇文章 0 订阅

交付软件给客户却是很多问题,一些问题解决就可以了。但有些问题却是一时出现,一时不出现,十分令人恼火,程序猿是超人也难以应付。本文以编译警告为引入点述说在开发过程中的匪夷所思的问题。引以为鉴,重视警告的影响。

1.未引用形参

warning: unused variable 'value'.
警告:未使用变量"value"

  致命行为:

  • 用错变量导致程序得不到正确结果。
double sum(double a, double b)
{
	return a;
}
  • 变量未使用造成内存泄漏。
...
Car car = new Car();
...

  建议:

  • 避免这种行为,但这种情况下大多数出现在作为函数参数。但你要明确的是尽管作为扩展(以后使用)用的函数参数,是否应该考虑下本身设计的问题。

2.可能丢失数据

warning: implicit conversion turns floating-point number into integer: 'double' to 'int'.
警告:隐式转换将浮点数转换为整数:"double"到"int"。

  致命行为:

  • 丢失精度,类似于蝴蝶效应,小小的精度却会引起巨大的误差。
  • 整型转换枚举导致枚举变量成不确定值。
enum Fruits { Apple, Orange, Banana};
Fruits fruits = (Fruits)5; // fruits成不确定值,值取决于编译器。

  建议:

  • 强制转换导致丢失数据,应该避免此行为。
  • 但有些情况下却不会,例如整型转换浮点型,枚举转整型。它们都是从小范围转换到大范围。

3.初始化变量顺序不正确

warning: field 'j' will be initialized after field 'i'.
警告:字段"j"将在字段"i"之后初始化。

  致命行为:

  • 导致变量值偏离。
class Car
{
public:
    Car () : j(i + 2), i(1) // 由于j先于i初始化,导致j变量的预期结果却不是3。
    {
    }

private:
    int i;
    int j;
};

  建议:

  • 注意:该行为多出现于类和结构体(C++)的构造函数中。
  • 变量之间存在依赖关系容易造成难以想象的bug,就好比怎么有时运行可以,有时却不可以的问题。

4.if语句有空语句

warning: if statement has empty body.
警告:if语句有语句。

  致命行为:

  • 有时运行正常,有时运行异常(非常令人恼火的bug)。
if (enable); // 由于";"语句的存在导致value的值一直不会刷新。
    value = sum(i, j);

  建议:

  • 必须修正!

5.可能除0

warning: division by zero is undefined.
警告:未定义被零除。

  致命行为:

  • 导致程序异常退出。
value = i / j; // 由于j变量可能为0值,严重会导致程序异常退出。

  建议:

  • 先判断变量是否为不为0,再做运算。

6.变量使用前未初始化

warning: variable 'value' is uninitialized when used here.
警告:变量"value"在这里使用时未初始化。

  致命行为:

  • 过于相信直觉,以为value默认为0。导致难以想象的bug。
int value;
if (value == 0) // 由于变量未确定初始值,则值不确定会导致判断有时会不进入。
	enable = true;

  建议:

  • 养成给变量初始化的好习惯。

7.使用=作为比较

warning: using the result of an assignment as a condition without parentheses.
警告:将赋值结果用作不带括号的条件。
use '==' to turn this assignment into an equality comparison.
使用'=='将该赋值转换为相等比较

  致命行为:

  • 唔使用导致判断一直生效或失效的行为。
if (i = 1) // 一直生效
    enable = true;	
 
if (i = 0) // 一直失效
    enable = true;	   

最后

  • 这些编译警告只是冰山一角,有些能正常运行,有些却是致命错误。引以为鉴!
  • 如读者也有些值得注意的警告可以在公众号留言分享给大家。
  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Finding bugs(寻找错误)是指在软件开发过程中,为了保证软件的质量和稳定性,通过一系列的测试和调试过程,找出软件中存在的错误和缺陷,并进行修复的活动。 寻找错误是软件开发过程中必不可少的一步。在软件开发过程中,无论是编写代码、设计界面还是实施功能,都可能出现各种各样的错误。这些错误可能导致软件无法正常运行、功能异常或者性能低下。为了及时发现和修复这些错误,需要进行系统而全面的错误寻找工作。 寻找错误的方法和技巧有很多种。其中一种常用的方法是黑盒测试。黑盒测试是指在不了解软件内部结构和具体实现的情况下,通过输入一些指定的测试用例,观察软件的输出结果,并与预期结果进行对比,从而判断软件是否存在错误。另外一种方法是白盒测试。白盒测试是指在了解软件内部结构和具体实现的情况下,通过对代码进行逐行逐句的检查,发现其中潜在的错误。 除了以上的方法,还可以使用自动化的测试工具来辅助寻找错误。这些工具能够模拟用户的操作,快速地执行大量的测试用例,并生成详细的测试报告,帮助开发人员准确定位和修复错误。 在寻找错误的过程中,要保持耐心和专注。有时候错误可能隐藏得很深,需要仔细地分析和调试。同时,还要注重记录和总结错误,以便后续的修复工作。 总之,寻找错误是软件开发过程中不可或缺的一环。通过系统而全面的测试和调试工作,可以及时发现和修复软件中存在的错误和缺陷,提高软件的质量和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值