【发布时间】:2015-03-21 15:39:00
【问题描述】:
我已经学习 C++ 两个月了,现在我正在学习我的书(Programming Principles and Practice using C++)中关于错误的章节。但是在研究了第一页之后,我有一个问题:运行时错误和逻辑错误有什么区别?根据我的书,运行时错误是在运行时通过检查发现的错误,我们可以进一步将运行时错误分类为:
- 硬件错误/操作系统错误
- 库检测到的错误
- 用户代码检测到的错误(什么是用户代码?)
而逻辑错误只是程序员在寻找错误结果的原因时发现的错误。
我以为我已经理解了这种差异,但后来作者提供的一个例子让我产生了疑问。这是一个例子:
#include "std_lib_facilities.h"
int area(int lenght, int width) // calculate area of rectangle
{
return lenght * width;
}
int framed_area(int x, int y) // calculate area within frame
{
return area(x - 2, y - 2);
}
int main()
{
int x = -1;
int y = 2;
int z = 4;
int area1 = area(x, y);
int area2 = framed_area(1, z);
int area3 = framed_area(y, z);
double ratio = double(area1) / area3;
}
以下是作者对这个例子的简要说明:
函数 area() 和 framed_area() 的调用导致否定 代表区域的值,分配给 area1 和 area2。应该 我们接受这样的错误结果吗?但在回答这些问题之前 看比率的计算,在比率area3的计算中 将为 0,除以 0 将导致硬件检测错误 用一些神秘的消息终止程序。这是 您或您的用户必须处理的错误类型 不要检测并明智地处理运行时错误。
我在这里不明白的是,为什么将负值用作计算面积的函数的参数被视为运行时错误,这不只是逻辑错误吗?我认为运行时错误只是由于例如将数字除以 0 和其他特殊情况而导致的错误。我错了还是我只是误解了什么? 逻辑错误和运行时错误之间的真正区别是什么?你能举几个小例子吗?
【问题讨论】:
标签: c++ runtime-error