君子性非異也,善假于物也。
如有恒,何須三更起,半夜眠;最怕莫,三天打魚兩天曬網,竹籃打水一場空!
posts - 31, comments - 23, trackbacks - 0, articles - 30
C++博客
::
首頁
::
新隨筆
::
聯系
::
聚合
::
管理
C中的跳轉語句[非goto]
Posted on 2006-11-04 21:18
neter
閱讀(1179)
評論(4)
編輯
收藏
引用
所屬分類:
程序設計
?1
#include?
<
stdio.h
>
?2
#include?
<
setjmp.h
>
?3
jmp_buf?buf;
?4
?5
static
?
void
?babana()
?6
{
?7
????printf(
"
in?babana()\n
"
);
?8
????longjmp(buf,
1
);
?9
????printf(
"
never?see?me\n
"
);
10
}
11
12
int
?main()
13
{
14
????
if
(setjmp(buf))
15
????
{
16
????????printf(
"
back?in?main\n
"
);
17
????}
18
????
else
19
????
{
20
????????printf(
"
first?time?through\n
"
);
21
????????babana();
22
????}
23
????
return
?
0
;
24
}
?setjmp()首先被調用,并且返回0.
goto是不能跳出當前函數的,而longjmp甚至可以跳到其他文件的函數中去(估計就是為什么要在名字里加個long的原因吧,:)).
但 longjmp只能跳回到曾經去過的地方,而setjmp正是標記到過的地方,所以從這角度來想的話,longjmp更像是"從何處來"而不是goto"去哪里".
這也可以所就是C++中" catch "," throw "?的一個起源吧.
Feedback
#
re: C中的跳轉語句[非goto]
回復
更多評論
2006-11-06 10:54 by
藍色feel's Blog
沒有用過
但是跨函數的跳轉會不會出問題呢
棧上東西怎么辦?
#
re: C中的跳轉語句[非goto]
回復
更多評論
2006-11-06 11:18 by
shaohua
to:@藍色feel's Blog
不會出問題的;
這個只是用于跳轉的,棧上的數據當然就是離開后被銷毀了啊,沒有辦法做保存的.
#
re: C中的跳轉語句[非goto]
回復
更多評論
2006-11-07 10:37 by
藍色feel's Blog
嗯,剛才實驗了一下,此話只對了一半
確實是被銷毀了,但是沒有調用析構函數
而C++中 throw catch 是能夠將棧上的對象正確析構的
#include <iostream>
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
class Foo
{
public:
Foo() { std::cout << "Ctor" << std::endl; }
~Foo(){ std::cout << "Dtor" << std::endl; }
};
static void babana()
{
Foo foo;
printf( " in babana()\n " );
longjmp(buf, 1 );
printf( " never see me\n " );
}
int main()
{
if (setjmp(buf))
{
printf( " back in main\n " );
}
else
{
printf( " first time through\n " );
babana();
}
return 0;
}
#
re: C中的跳轉語句[非goto]
回復
更多評論
2006-11-07 10:47 by
shaohua
to:@藍色feel's Blog
的確正如你說的那樣的,但我們平常一般都不會顯式地去釋放棧上的內存的,如果一定要這樣做的話也是沒有錯的,但其實沒有多大的必要的,因為系統自己會對棧進行很好的管理的.
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
【推薦】100%開源!大型工業跨平臺軟件C++源碼提供,建模,組態!
相關文章:
[轉]Win32應用程序中進程間通信方法分析與比較
BCD碼
[轉]編寫高效的數據庫連接池
[MSDN]使用連接池
[轉]VC中基于 Windows 的精確定時
基于 Visual C++6.0 的 DLL 編程實現
[后記]大瓶子與小瓶子的問題
大瓶子與小瓶子的問題
用C描述MD5算法
初識MD5算法
網站導航:
博客園
IT新聞
BlogJava
博問
Chat2DB
管理
Powered by:
C++博客
Copyright © neter
日歷
<
2025年5月
>
日
一
二
三
四
五
六
27
28
29
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
公告
如有侵犯您的版權,請來信告知,我將立即刪除,謝謝!
隨筆分類
程序設計(21)
狂人日記(10)
文章分類
Android相關(1)
軟件測試初探(5)
數字圖像(11)
探索嵌入式開發(4)
網絡與通信(3)
英語學習(6)
不錯的站點
codeguru
codeproject
csdn
vchelp
搜索
積分與排名
積分 - 42153
排名 - 518
最新評論
1.?re: [轉]編寫高效的數據庫連接池
不錯
--tianliang
2.?re: JPEG壓縮編碼標準[未登錄]
good!
--123
3.?re: 初中英語語法學習順口溜
Thank you
--inliner
4.?re: [轉]圖像處理網絡資源[未登錄]
好東西哪,,,。。
--可可
5.?re: JPEG壓縮編碼標準
很不錯啊,有些地方講的很不清楚,這個很好
--沙田西瓜
閱讀排行榜
1.?MFC中獲取程序運行的路徑(2830)
2.?[轉]編寫高效的數據庫連接池(1834)
3.?文件系統監控(1593)
4.?C中的跳轉語句[非goto](1179)
5.?簡單文件分割(06川大考研最后一題)(801)
久久综合久久美利坚合众国
|
久久w5ww成w人免费
|
精品熟女少妇av免费久久
|
久久99精品九九九久久婷婷
|
久久久久久久久无码精品亚洲日韩
|
久久亚洲AV成人无码软件
|
久久久久高潮毛片免费全部播放
|
国产免费久久精品丫丫
|
狠狠色婷婷综合天天久久丁香
|
久久一区二区三区免费
|
日本精品久久久中文字幕
|
国产69精品久久久久777
|
国产亚洲婷婷香蕉久久精品
|
麻豆精品久久精品色综合
|
国产精品激情综合久久
|
欧美精品丝袜久久久中文字幕
|
精品久久久久久国产免费了
|
久久强奷乱码老熟女
|
亚洲∧v久久久无码精品
|
久久综合九色综合久99
|
香港aa三级久久三级老师2021国产三级精品三级在
|
亚洲综合精品香蕉久久网97
|
亚洲伊人久久成综合人影院
|
久久久久久久人妻无码中文字幕爆
|
99热热久久这里只有精品68
|
久久天天躁狠狠躁夜夜不卡
|
久久亚洲欧美日本精品
|
亚洲伊人久久大香线蕉综合图片
|
青青青伊人色综合久久
|
伊人色综合九久久天天蜜桃
|
久久久九九有精品国产
|
亚洲中文字幕无码一久久区
|
久久精品国产秦先生
|
综合久久国产九一剧情麻豆
|
日韩亚洲欧美久久久www综合网
|
2021久久精品免费观看
|
一本伊大人香蕉久久网手机
|
99久久国产综合精品女同图片
|
国产69精品久久久久99尤物
|
久久夜色精品国产www
|
色综合久久88色综合天天
|