zoukankan      html  css  js  c++  java
  • 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!
    ";
    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()
    ";
    27         std::abort();
    28     }
    29     return 2.0*a*b/(a+b);
    30 }

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

  • 相关阅读:
    链表栈
    C# TCP应用编程二 同步TCP应用编程
    C# TCP应用编程一 概述
    C# 网络流
    远程连接 出现身份验证错误,要求的函数不受支持(这可能是由于CredSSP加密Oracle修正)
    C#线程Thread类
    C# 通过Internet搜索网络资源
    正则表达式
    C#文件的读写
    微服务实战
  • 原文地址:https://www.cnblogs.com/grooovvve/p/10435099.html
Copyright © 2011-2022 走看看