C++异常调用abort()
来源:互联网 发布:彩票大数据 编辑:程序博客网 时间:2024/06/06 15:48
以一个计算两个数的调和平均数的函数为例。两个数的调和平均数的定义是:这两个数倒数的平均值的倒数,因此表达式为:1.0 * x * y / (x + y)。
如果y是x的负值,则上述公式将导致被零除——一种不允许的运算。对于被零除的情况,很多新式编译器通过生成一个表示无穷大的特殊浮点值来处理,cout将这种值显示为Inf、inf、INF或类似的东西;而其他的编译器肯呢哥生成在发生被零除时崩溃的程序。最好编写在所有系统上都以相同的受控方式运行的代码。
对于这种问题,处理方式之一是,如果其中一个参数是另一个参数的负值,则调用abort()函数。Abort函数的原型位于头文件cstdlib(或stdlib.h)中,其典型实现是向标准错误流(即cerr使用的错误流)发送消息abnormal program termination(程序异常终止),然后终止程序。它还返回一个随实现而异的值,告诉操作系统(如果程序是由另一个程序调用的,则告诉父进程),处理失败。abort()是否刷新文件缓冲区(用于存储读写到文件中的数据内存区域)取决于实现。如果愿意,也可以使用exit(),该函数刷新文件缓冲区,但不显示消息。
下面是一个使用abort()的小程序。error1.cpp
// error1.cpp -- using the abort() function#include <iostream>#include <cstdlib>double hmean(double a, double b);int main(){ double x, y, z; std::cout << "Enter two numbers: "; while (std::cin >> x >> y) { z = hmean(x, y); std::cout << "Harmonic mean of " << x << " and " << y << " is " << z << std::endl; std::cout << "Enter next set of numbers <q to quit>: "; } std::cout << "Bye!\n"; return 0;}double hmean(double a, double b){ if (a == -b) { std::cout << "untenable arguments to hmean()\n"; std::abort(); } return 2.0 * a * b / (a + b);}
效果:
Enter two numbers: 3 6Harmonic mean of 3 and 6 is 4Enter next set of numbers <q to quit>: 10 -10untenable arguments to hmean()Aborted (core dumped)
在hmean()中调用abort()函数将直接终止程序。(所以看不到"Bye!")
为了避免异常终止,程序员在调用hmean()函数之前应检查x和y的值。然而,依靠程序员来执行这中间查是不安全的。
0 0
- C++异常调用abort()
- [C++]exit & abort & 析构 & 异常
- Linux C 异常处理:绝对异常终止 exit()/abort()、assert()
- ARM的Abort异常
- ARM的Abort异常
- uboot出现data abort异常
- aspx调用c++dll异常
- C语言中的abort函数
- C++: abort, terminate or exit?
- 线程中断异常的处理 abort()
- WinCE中的Data/ Prefetch Abort异常定位
- ARM Linux 异常处理 ---data abort
- ARM处理器怎样处理DATA ABORT异常
- ARM Linux异常处理之data abort
- Software caused connection abort: recv failed异常
- Software caused connection abort: recv failed异常
- C++ 异常处理(廿五)--abort()
- arm linux之data abort异常处理
- [BZOJ1488][HNOI2009]图的同构(dfs+置换群+数论+组合数学)
- 如何在网上找到并下载你想要的软件
- 结构体
- js如何判断一个数是不是整数类型
- win10平台mysql5.6.34免安装版(绿色版zip)的配置以及密码和编码设置
- C++异常调用abort()
- scrapy爬虫:CrawlSpider用法与总结
- 会话管理技术
- linux下火狐浏览器不能播放视频
- Windows使用PuTTY连接Ubuntu
- 42、Linux初步(CentOS 7下安装JDK)
- Repeating Decimals
- LeetCode 530. Minimum Absolute Difference in BST 解题报告
- 抽象工厂模式