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

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

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

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/290513

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月15日 下午12:56
下一篇 2023年2月15日 下午12:56

相关推荐