C++ C++;换行多次返回
我有以下代码,它在许多行中返回错误:C++ C++;换行多次返回,c++,function,return,C++,Function,Return,我有以下代码,它在许多行中返回错误: bool func() { if (acondition) { return 0; } return 1; } int cmdfun() { other_funcs; if (func()) return ERROR#NUMBER; other_funcs; if (func()) return ERROR#NUMBER; } 但我发现它变得越来越长。如何将返回错误#NUMB
bool func()
{
if (acondition)
{
return 0;
}
return 1;
}
int cmdfun()
{
other_funcs;
if (func()) return ERROR#NUMBER;
other_funcs;
if (func()) return ERROR#NUMBER;
}
但我发现它变得越来越长。如何将返回错误#NUMBER也封装到func()中?或任何封装if(func())返回错误的方法;进入另一个独立的函数?您不能单独使用
return
来实现这一点
但是您可以在func
中抛出一个异常,该异常将在调用堆栈中冒泡,就像您希望程序控制那样:
struct myexception{}; /*ToDo - inherit from std::exception?*/
bool func()
{
if (acondition){
return 0; /*normal behaviour, perhaps make `func` void if not needed?*/
}
throw myexception();
}
cmdfun
然后采用以下形式:
int cmdfun()
{
other_funcs;
func();
other_funcs;
func();
/* don't forget to return something*/
}
最后,请确保捕捉到cmdfun
调用方中的异常。如果我正确理解了您的问题,您是在为自己的错误请求“错误报告者”。针对两种不同的情况,有两种解决方案:
案例1-您仍然希望使用return语句生成“error reporter”:
要做到这一点,您必须创建另一个函数,或者只是学习如何使用goto。但是,您不需要-您的函数返回一个布尔值(bool)-这意味着您只有两个可能的结果:0(False)和1(True)
但我认为第二种情况更有趣(不幸的是,作为一个初学者,它也很难理解,第一种解决方案对你来说可能容易得多):
案例2-您决定以其他方式进行操作-这是通过学习投掷和捕获-我不会重复答案,因为已经给出了:@Bathsheba回答了preety good…正如我所说的,这不是异常,不能由std::exception处理,它只是一条错误消息,错误号只是另一个宏。我无法访问cmdfun()的调用方。因此无法采纳第一个答案。但在询问其他人后,可以封装返回并在键入返回时节省时间,虽然不建议这样做,但在这种特殊情况下,我可以使用宏。下面给出了一个完整的示例:
#include <iostream>
using namespace std;
#define CHECK_VEC(acondition)\
if(checkcondition(acondition)) return -1;
bool checkcondition(bool acondition)
{
if (acondition) return 1;
return 0;
}
int fun_called_by_main()
{
int a = 5 + 4;
bool acondition = a;
CHECK_VEC(acondition);
return 1;
}
int main()
{
int a = fun_called_by_main();
cout << a << endl;
cin.get();
return 0;
}
#包括
使用名称空间std;
#定义检查向量(条件)\
if(checkcondition(acondition))返回-1;
布尔检查条件(布尔条件)
{
如果(条件)返回1;
返回0;
}
int fun_被_main()称为
{
INTA=5+4;
布尔条件=a;
检查车辆(条件);
返回1;
}
int main()
{
int a=fun_被_main()调用;
为什么不使用为这种情况设计的异常呢?@πάνταῥεῖ 它是关于封装调用堆栈的返回,如func()->cmdfun()->main(),以便func()可以直接将错误返回到main(),因此无需将返回错误放入cmdfun()。您不能像前面提到的那样封装返回使用异常。@πάνταῥεῖ 但这也不例外。它只是双重返回和封装返回。好吧,如果你一直拒绝接受帮助,我们该怎么办?基本上我想从cmdfun()直接调用的函数返回名为cmdfun()的函数中的错误,例如main(),这里是func()。因此堆栈是func()->cmdfun()->main(),但我想要func()直接将错误返回给main()。@VVI C和C 15不要让OP继续寻找错误的树。你的answr没有多少价值。
#include <iostream>
using namespace std;
#define CHECK_VEC(acondition)\
if(checkcondition(acondition)) return -1;
bool checkcondition(bool acondition)
{
if (acondition) return 1;
return 0;
}
int fun_called_by_main()
{
int a = 5 + 4;
bool acondition = a;
CHECK_VEC(acondition);
return 1;
}
int main()
{
int a = fun_called_by_main();
cout << a << endl;
cin.get();
return 0;
}