社区
C语言
帖子详情
跨函数的代码能跳转吗?
kgblue
2007-05-28 12:12:03
goto语句只能在一个函数里面实行跳转,C语言中有没有语句可以实现跨函数之间的代码跳转的呢?
...全文
1023
18
打赏
收藏
跨函数的代码能跳转吗?
goto语句只能在一个函数里面实行跳转,C语言中有没有语句可以实现跨函数之间的代码跳转的呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
mifeixq
2008-12-26
打赏
举报
回复
1L
setjmp longjmp
hai040
2008-12-26
打赏
举报
回复
[Quote=引用 12 楼 softwarewander 的回复:]
一直保持它的值唯一 还要用voliate?
ls所说的我知道, 就是在编译的时候,如果longjump之后有voliate变量的时候,还是需要将其进行编译。如果没有就可以理都不理。 但是怎么能保证“局部变量在longjmp过程中一直保持它的值唯一”
所以还是不理解。。。
[/Quote]
...
一直保持它的值,唯一可靠的方法
zenny_chen
2008-12-26
打赏
举报
回复
除了setjmp-longjmp外,内联汇编jump指令有时也是一种比较有效的方法。
shaoshaolong
2008-12-25
打赏
举报
回复
牛,这样的代码都被想了出来!不过倒可以用汇编来写,然后C语言调用之
过去的我
2008-12-25
打赏
举报
回复
顶.. 函数间跳来跳去堆栈肯定不平衡. 我咋在看c专家编程的时候没看到..
aqingzeng
2008-12-25
打赏
举报
回复
"一直保持它的值唯一 " 可能有点用词不当 :)
softwarewander
2007-05-29
打赏
举报
回复
一直保持它的值唯一 还要用voliate?
ls所说的我知道, 就是在编译的时候,如果longjump之后有voliate变量的时候,还是需要将其进行编译。如果没有就可以理都不理。 但是怎么能保证“局部变量在longjmp过程中一直保持它的值唯一”
所以还是不理解。。。
september_29
2007-05-28
打赏
举报
回复
setjump longjump
星羽
2007-05-28
打赏
举报
回复
可以
#include "setjmp.h"
jmp_buf jmpbuf;
void Funtion()
{
cout<<"hellp :)"<<endl;
longjmp(jmpbuf, 1);
}
int main()
{
if (setjmp(jmpbuf) == 0)
{
for (;;) Funtion();
}
cout<<"hi :)"<<endl;
system("pause");
return 1;
}
pnz_fox
2007-05-28
打赏
举报
回复
还是不要用goto,呵呵
rainstormed
2007-05-28
打赏
举报
回复
goto 可以实现任意跳转
但尽量不要用goto
pxxx123
2007-05-28
打赏
举报
回复
不行!
believefym
2007-05-28
打赏
举报
回复
不行
而且尽量少用goto
珍惜生命远离CPP
2007-05-28
打赏
举报
回复
当然可以,跳转不当堆栈会错误的
fengdream
2007-05-28
打赏
举报
回复
as long as i can see, no.
ayw215
2007-05-28
打赏
举报
回复
volatile
通知编译器不优化代码
否则在编译的时候就可能会忽略掉longjmp后面的局部变量
softwarewander
2007-05-28
打赏
举报
回复
不明白这句话
************************************************************************
要保证局部变量在longjmp过程中一直保持它的值唯一可靠的方法是声名为volatile
麻烦ls大哥解释一下,
chenyu2202863
2007-05-28
打赏
举报
回复
在C专家编程里面可有提到setjmp和longjmp
setjmp(),longjmp()是通过操纵过程活动记录实现的。
* setjmp(jmp_buf j)必须首先被调用,表示“使用变量j记录的位置,函数返回零”
* longjmp(jmp_buf j,int i)可以接着被调用,表示“回到j所记录的位置 ,让它看上去像从原先的setjmp()函数返回一样,返回i,使代码能够知道它实际上是通过longjmp()返回的”。(很拗口)
* goto语句不能跳出C语言当前的函数(这也就是longjmp取名字的由来,它可以跳得更远,甚至跳到其他文件的函数中)
* longjmp只能跳回到曾经到过的地方,在执行setjmp的地方仍留下一个活动记录也就是“从何而来,往哪儿去”,longjmp接受一个额外的整形参数并返回他的值
#include <setjmp.h>
jmp_buf buf;
Banana()
{
printf("In Banana()\n");
longjmp(buf,1);
/*下面的代码不会执行
printf("You'll never see this ,because longjmp");
}
int main(void)
{
if( setjmp(buf) )
{
printf("Back in main\n");
}
else
{
printf("First time through\n");
Banana();
}
system("pause");
return 0;
}
输出结果:
First time through
in Banana
Back in main
要保证局部变量在longjmp过程中一直保持它的值唯一可靠的方法是声名为volatile
setjmp/longjmp最大的用途是错误恢复,只要没有从函数中返回,一旦发现一个不不可恢复的错误,就可以把控制转移到主输入循环,从新开始。
MySQL
函数
、用户自定义
函数
Re: MySQL
函数
、用户自定义
函数
==============================# MySQL
函数
的意义 MySQL 自身提供大量功能强大、方便易用的
函数
。使用这些
函数
,可以极大地提高用户对数据库的管理效率。 #
函数
的分类 # 用户自定义
函数
我们学习了 MySQL 的系统内置的
函数
之后,如果系统内置的
函数
不能满足我们的应用,可以创建存储
函数
。-------------------------------
vscode
代码
函数
依赖
跳转
怎么做
在 Visual Studio Code 中,您可以使用快捷键 F12 来
跳转
到
代码
函数
的定义处。也可以使用快捷键 Ctrl+Click 或者在
函数
名上按下 Alt+Click 来
跳转
到
函数
定义处。 此外,您还可以使用 Visual Studio Code 的“Peek ...
java
跨
函数
跳转
_VS code
函数
无法
跨
文件
跳转
到定义
现状:本文件
函数
通过this打点调用的
函数
,引入绝对路径的文件,调用的
函数
都可以通过Ctrl + 点击 实现
跳转
到定义处。而如果在 webpack 通过alias 设置了别名,无法
跳转
成功。解决方案: 新建文件 jsconfig.json,...
使用setjmp和longjmp
函数
实现
跨
函数
跳转
setjmp和longjmp
函数
的
跳转
有别于goto语句。它是指在栈空间上的
跳转
。用于
函数
间
跳转
时,调用longjum
函数
以返回到程序的主循环中,而不是从该处理程序返回。 这是一段实例
代码
: 运行结果: ...
vscode 的
函数
跳转
问题
vscode 的
函数
跳转
问题
C语言
69,369
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章