C++可以通过异常处理的throw和catch来实现从子函数的子函数直接返回主函数,汇编语言可以用jmp指令跳转实现这个需求.
C语言主要靠函数调用和return在函数之间切换,很难做到在多层调用中直接返回主函数.虽然goto语句可以无条件跳转,但是必须在同一个函数中使用.
所以呢解决的方法也是用一个特殊的值作为需要返回的标志,然后在两层调用函数中都遇到该值就返回,但是这个方法也有两个前提:
①.)你的两个子函数都是由返回值的函数
所以呢建议你的这个问题还是用C++ 的异常去解决比较好.
函数返回上一级使用return语句就行了.
c标准库里有一套函数:setjmp/longjmp ,程序员可以在任意位置调用setjmp保存现场,然后在任意另外位置调用longjmp跳到那个保存的现场.这样就可以满足直接调回主函数的需求,但这套函数保存现场并不充分,而且打破正常流程控制,很不稳定,一般来所不推荐使用.
C语言是没有try语句的,还有,你这个地方也就算是一个函数(在C语言里面你写的这个try只能是函数)
有语法错误,帮你改了,你自己再看看
#includestdio.h
void try(int,int,int);
int main()
{
printf("(1)x=%d y=%d z=%d\n",x,y,z);
try(x,y,z);
}
void try(int x,int y,int z)
z=x+y;
x=x*x;
y=y*y;
一点补充:最开始我运行你这个程序是在一个.cpp文件里面写的代码,然后运行,但是程序会报错,为什么呢?因为cpp一般而言是C++的文件,C++里面有try语句,try是他的一个关键字,所以函数名不能是关键字,程序报错了.
但是在一个.c文件里面是没有问题的~~
还有,你这个真心是一个函数,不是try语句,try语句是
try
do something
catch(some error)
C语言里try是一个语句或函数.其作用是是抛出错误用.
将有可能产生错误的语句括在一起,放入try语句块.如果在try语句块中发生异常,FlashPlayer会创建一个错误对象,并将该Error对象派发至第一个可用的catch块.catch语句块提供对错误的处理.如果没有try语句,或者try语句没有出现错误,则catch语句不会被引发.如果在try语句块的其中某个语句中检测到错误,则会执行附加到该try语句的catch语句.catch语句可以并列使用,即在一个try语句块之后,存在多个catch语句块,以处理不同的错误对象.
try语句是:
①.、在c++中,可以直接抛出异常之后自己进行捕捉处理,如:(这样就可以在任何自己得到不想要的结果的时候进行中断,比如在进行数据库事务操作的时候,如果某一个语句返回SQL_ERROR则直接抛出异常,在catch块中进行事务回滚,用法:
#include iostream ?#include exception
using namespace std;
int main () {
throw 1;
throw "error";
catch(char *str)
cout str endl;
catch(int i)
cout i endl;
//可以自己定义Exception ?class myexception: public exception
virtual const char* what() const throw()
return "My exception happened";
}myex;
if(true) ? ?//如果,则抛出异常;
throw myex;
catch (exception e)
cout e.what() endl;
return 0;
扩展资料
c++的特点:
①.、C++通过建立用户定义类支持数据封装和数据隐藏.
以上就是土嘎嘎小编为大家整理的catch函数c语言相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!