扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
C++可以通过异常处理的throw和catch来实现从子函数的子函数直接返回主函数,汇编语言可以用jmp指令跳转实现这个需求。
10年积累的成都做网站、成都网站制作经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有那曲免费网站建设让你可以放心的选择与我们合作。
C语言主要靠函数调用和return在函数之间切换,很难做到在多层调用中直接返回主函数。虽然goto语句可以无条件跳转,但是必须在同一个函数中使用。
因此解决的方法也是用一个特殊的值作为需要返回的标志,然后在两层调用函数中都遇到该值就返回,但是这个方法也有两个前提:
1)你的两个子函数都是由返回值的函数
2)你选择的特殊值和函数正常的返回的取值不会冲突,不会引起二义性。
因此建议你的这个问题还是用C++ 的异常去解决比较好。
函数返回上一级使用return语句就行了。
c标准库里有一套函数:setjmp/longjmp ,程序员可以在任意位置调用setjmp保存现场,然后在任意另外位置调用longjmp跳到那个保存的现场。这样就可以满足直接调回主函数的需求,但这套函数保存现场并不充分,而且打破正常流程控制,很不稳定,一般来所不推荐使用。
C语言是没有try语句的,还有,你这个地方也就算是一个函数(在C语言里面你写的这个try只能是函数)
有语法错误,帮你改了,你自己再看看
#includestdio.h
void try(int,int,int);
int main()
{
int x=2,y=3,z=0; //y=3
printf("(1)x=%d y=%d z=%d\n",x,y,z);
try(x,y,z);
printf("(4)x=%d y=%d z=%d\n",x,y,z);
}
void try(int x,int y,int z)
{
printf("(2)x=%d y=%d z=%d\n",x,y,z);
z=x+y;
x=x*x;
y=y*y;
printf("(3)x=%d y=%d z=%d\n",x,y,z);
}
一点补充:最开始我运行你这个程序是在一个.cpp文件里面写的代码,然后运行,但是程序会报错,为什么呢?因为cpp一般而言是C++的文件,C++里面有try语句,try是他的一个关键字,所以函数名不能是关键字,程序报错了。
但是在一个.c文件里面是没有问题的~~
还有,你这个真心是一个函数,不是try语句,try语句是
try
{
do something
}
catch(some error)
{
do something
}
C语言里try是一个语句或函数。其作用是是抛出错误用。
将有可能产生错误的语句括在一起,放入try语句块。如果在try语句块中发生异常,FlashPlayer会创建一个错误对象,并将该Error对象派发至第一个可用的catch块。catch语句块提供对错误的处理。如果没有try语句,或者try语句没有出现错误,则catch语句不会被引发。如果在try语句块的其中某个语句中检测到错误,则会执行附加到该try语句的catch语句。catch语句可以并列使用,即在一个try语句块之后,存在多个catch语句块,以处理不同的错误对象。
try语句是:
try
{
do something
}
catch(some error)
{
do something
}
1、在c++中,可以直接抛出异常之后自己进行捕捉处理,如:(这样就可以在任何自己得到不想要的结果的时候进行中断,比如在进行数据库事务操作的时候,如果某一个语句返回SQL_ERROR则直接抛出异常,在catch块中进行事务回滚,用法:
#include iostream #include exception
using namespace std;
int main () {
try
{
throw 1;
throw "error";
}
catch(char *str)
{
cout str endl;
}
catch(int i)
{
cout i endl;
}
}
2、 try 和catch定义异常类来进行处理:
#include iostream #include exception
using namespace std;
//可以自己定义Exception class myexception: public exception
{
virtual const char* what() const throw()
{
return "My exception happened";
}
}myex;
int main () {
try
{
if(true) //如果,则抛出异常;
throw myex;
}
catch (exception e)
{
cout e.what() endl;
}
return 0;
}
扩展资料
c++的特点:
1、C++通过建立用户定义类支持数据封装和数据隐藏。
2、C++是支持数据封装的工具,对象则是数据封装的实现。
3、采用多态性为每个类指定表现行为。多态性形成由父类和它们的子类组成的一个树型结构。
4、C++现有类的基础上可以声明新类型,这就是继承和重用的思想。通过继承和重用可以更有效地组织程序结构,明确类间关系,并且充分利用已有的类来完成更复杂、深入的开发。新定义的类为子类,成为派生类。
参考资料来源:百度百科—C++
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流