C++_异常1-调用abort()

异常是相对较新的C++功能,有些老式编译器可能没有实现。另外有些编译器可能默认关闭这一特性,需要使用编译器选项来打开它。

 

这里先讨论一个基本问题:

2.0 * x * y / (x+y)

如果y是x的负值,则上述公式将导致被零除。这是一种不允许的运算。很多新式编译器通过生产一个表示无穷大的特殊浮点值来处理。

例如Inf,inf,INF等。

 

对于这种问题,处理方式之一就是,如果其中一个参数是另一个参数的负值,则调用abort()函数

Abort()函数的原型位于头文件cstdlib中,其典型实现是向标准错误流发送消息abnormal program termination(程序异常终止),然后终止程序。

它还返回一个随实现而异的值,告诉操作系统,实现失败。

abort()函数是否刷新文件缓冲区取决于实现。

如果愿意,也可以使用exit(),该函数刷新文件缓冲区,但不显示消息。

文件缓冲区:用于存储读写到文件的数据的内存区域。

 

 1 #error1.cpp --using the abort() function
 2 #include <iostream>
 3 #include <cstdlib>
 4 double hmean(double a, double b);
 5 
 6 int main()
 7 {
 8     double x,y,z;
 9     std::cout<<"Enter two numbers:";
10     while()
11     {
12         z=hmean(x,y);
13         std::cout<<"Harmonic mean of"<<x<<"and"<<y
14                <<"is"<<z<<std:endl;
15         std::cout<<"Enter next set of numbers<q to quit>:";
16 
17     }
18     std::cout<<"Bye!\n";
19     return 0;
20 }
21 
22 double hmean(double a, double b)
23 {
24     if(a == -b)
25     {
26         std::cout<<"untenable arguments to hmean()\n";
27         std::abort();
28     }
29     return 2.0*a*b/(a+b);
30 }

为了避免异常终止,程序应在调用hmean()函数之前检查x和y的值。然而,依靠程序员来执行这种检查是不安全的。

转载于:https://www.cnblogs.com/grooovvve/p/10435099.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值