C++异常 返回错误码

一种比异常终止更灵活的方法是,使用函数的返回值来指出问题。例如,ostream类的get(void)成员ASCII码,但到达文件尾时,将返回特殊值EOF。对hmean()来说,这种方法不管用。任何树脂都是有效的返回值,因此不存在可用于指出问题的特殊值。在这种情况下,可使用指针参数或引用参数来将值返回给调用能够程序,并使用函数的返回值来指出成功还是失败。istream族重载>>运算符使用了这种技术的变体。通过告知调用程序是成功了还是失败了,使得程序可以采取异常终止程序之外的其他措施。下面的程序是一个采用这种方式的示例,它将hmean()的返回值重新定义为bool,让返回值指出成功了还是失败了,另外还给该函数增加了第三个参数,用于提供答案。
error2.cpp

// error2.cpp -- returning an error code
#include <iostream>
#include <cfloat>   // (or float.h) for DBL_MAX

bool hmean(double a, double b, double * ans);

int main()
{
    double x, y, z;

    std::cout << "Enter two numbers: ";
    while (std::cin >> x >> y)
    {
        if (hmean(x, y, &z))
            std::cout << "Harmonic mean of " << x << " and " << y
                    << " is " << z << std::endl;
        else
            std::cout << "One value should not be the negative "
                      << "of the other - try again.\n";
            std::cout << "Enter next set of numbers <q to quit>: ";
    }
    std::cout << "Bye!\n";
    return 0;
}

bool hmean(double a, double b, double * ans)
{
    if (a == -b)
    {
        *ans = DBL_MAX;
        return false;
    }
    else
    {
        *ans = 2.0 * a * b / (a + b);
        return true;
    }
}

效果:

Enter two numbers: 3 6
Harmonic mean of 3 and 6 is 4
Enter next set of numbers <q to quit>: 10 -10
One value should not be the negative of the other - try again.
Enter next set of numbers <q to quit>: 1 19
Harmonic mean of 1 and 19 is 1.9
Enter next set of numbers <q to quit>: q
Bye!

另一种在某个地方存储返回条件的方法是使用一个全局变量。可能问题的函数可以在出现问题时将该全局变量设置为特定的值,而调用程序可以检查该变量。传统的C语言数学库使用的就是这种方法,它使用的全局变量名为errno。当然,必须确保其他函数没有将该全局变量用于其他目的。

时间: 2024-10-07 09:47:53

C++异常 返回错误码的相关文章

ErrorCode枚举类型返回错误码信息测试,手动抛出异常信息,在事务中根据错误码来回滚事务的思路。

ErrorCode.java 简单测试代码,具体应用思路:手动抛出异常信息,在事务中根据错误码来回滚事务的思路. public enum ErrorCode { //系统级 SUCCESS("000000","success"), SYS_ERROR("999999","系统异常"), FAILED("900000","操作失败!"), //交易部分 OWNER_NOT_EXIST(&q

java异常和错误码定义规范及其使用

前言 本随笔是最近进行实际项目开发时总结的一些经验,可供需要的伙伴借鉴. 场景 使用java提供服务的后端系统,使用者(可能是web前端或者是第三方调用者)通过api形式进行调用. 以前可能遇到的问题 这里会不会发生异常?如果发生了我应该怎么做? 我要定义哪些自定义异常? 捕获到一个"未知"异常时,我该将其抛出去还是就地打印其堆栈信息? 问题分析 为什么会产生异常? 简单理解就是,异常是程序执行过程中未按预想状态执行的状态. 为什么要自定义异常? 1)与系统(这里指的是非本项目)异常做

捉虫记:SHGetSpecialFolderPath返回错误码为2

通常我们想获得系统的一些路径时,都会使用一些Shell函数.比如SHGetSpecialFolderPath,SHGetFolderPath,SHGetKnownFolderPath等,传入我们想要的路径的CSIDL即可.通常情况下都会得到我们想要的结果.但是也存在例外. 目前从事的工业监控软件的研发,一般的监控软件通常都是属于中大型的系统,还包括组态期和运行期,所以复杂度相对来说还是比较高的.上周测试团队报告了一个Bug,在运行期时,监控日志的保存按钮点击没反应.咋一看,就感觉好像是类似Fil

[Jmeter]jemeter启动报错,返回错误码 5,处理方法

今天在使用jmeter的时候,启动GUI,发现bat文件执行有告警,告警内容如下: java.util.prefs.WindowsPreferences <init>WARNING: Could not open/create prefs root node Software\JavaSoft\Prefs at root 0x80000002. Windows RegCreateKeyEx(...) returned error code 5. 报错原因: jmeter需要写注册表 解决办法:

socket连接返回错误码

10035-WSAEWOULDBLOCK 资源暂时不可用.对非锁定套接字来说,如果请求操作不能立即执行的话,通常会返回这个错误.比如说,在一个非暂停套接字上调用 connect,就会返回这个错误.因为连接请求不能立即执行. 10037-WSAEALREADY 操作已完成.一般来说,在非锁定套接字上尝试已处于进程中的操作时,会产生这个错误.比如,在一个已处于连接进程的非锁定套接字上,再一次调用 connect 或 WSAConnect.另外,服务提供者处于执行回调函数(针对支持回调例程的 Wins

【postMan】发送post请求,返回错误码415

解决方法: 参看:https://www.cnblogs.com/spec-dog/p/3731279.html ============ 未完善 待续 原文地址:https://www.cnblogs.com/sxdcgaq8080/p/8469451.html

CMPP错误码说明

与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zzzzSMSC返回状态报告的状态值为DELETEDMK:zzzzSMSC返回状态报告的状态值为UNDELIVML:zzzzSMSC返回状态报告的状态值为ACCEPTDMM:zzzzSMSC返回状态报告的状态值为UNKNOWNMN:zzzzSMSC返回状态报告的状态值为REJECTD 回页首 CMPP发送失败代码对照表 值(4位,不足4位前面补0) 含义1 消息结构错2 命令字错误3 消息序列号重复4

转!!CMPP 网关错误码说明

与中国移动代码的对应关系. MI::zzzzSMSC返回状态报告的状态值为EXPIREDMJ:zzzzSMSC返回状态报告的状态值为DELETEDMK:zzzzSMSC返回状态报告的状态值为UNDELIVML:zzzzSMSC返回状态报告的状态值为ACCEPTDMM:zzzzSMSC返回状态报告的状态值为UNKNOWNMN:zzzzSMSC返回状态报告的状态值为REJECTD 回页首 CMPP发送失败代码对照表 值(4位,不足4位前面补0) 含义1 消息结构错2 命令字错误3 消息序列号重复4

socket学习及各类错误码(部分转)

如果本地有多个网卡(即多个ip),要指定本地发送网卡,则在建立的socket上bind所指定的网卡进行connect和send操作.例子程序如下: #include <stdio.h>#include "WinSock2.h"#pragma comment(lib,"ws2_32.lib") SOCKET tcp_socket;SOCKADDR_IN tcpAddr;const int BufLen=1024;char SendBuf[BufLen];