曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 2950|回复: 0
打印 上一主题 下一主题

abort() -- 异常处理

[复制链接]

716

主题

734

帖子

2946

积分

超级版主

Rank: 9Rank: 9Rank: 9

积分
2946
跳转到指定楼层
楼主
发表于 2013-12-29 10:01:14 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于产生异常(如一个被 0 除的计算式)的处理方法之一是调用 abort() 函数。

abort() 函数原型位于头文件 cstdlib 或 stdlib.h 中,其典型的实现是向标准错误流(cerr 使用的错误流)发送 abnormal program termination(程序异常终止),然后终止程序。它还返回一个随实现而异的值,告诉操作系统(如果程序是由另一个程序调用的,那么就告诉父进程),处理失败。

abort() 是否刷新缓冲区(用于存储写到文件中的数据的内存缓冲区)取决于实现。如果愿意,也可以使用 exit() ,该函数刷新文件缓冲区,但不显示消息。

测试程序:
[C++] 纯文本查看 复制代码
#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); 
}

注意,在 hmean() 中调用 abort() 函数将会直接终止程序,而不是返回到 main() 中。一般来说,显示的程序异常中断消息岁编译器而异。


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-4-30 14:42 , Processed in 0.080245 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表