您能使用多少种方法实现一个无限循环??
将你所想到的方法都列出来....
:)
问题点数:20、回复次数:60Top
1 楼iamcaicainiao(老菜,长征)回复于 2006-03-20 14:11:13 得分 0
无穷。
while(1)
while(2)
while(3)
……Top
2 楼JerKii(JERKII SHANG)回复于 2006-03-20 14:14:38 得分 0
__asm
{
L0: push offset L0
ret
}Top
3 楼JerKii(JERKII SHANG)回复于 2006-03-20 14:15:10 得分 0
TO iamcaicainiao(菜菜鸟) ,你所写的方法一点也不精妙:)Top
4 楼hslinux(幻世龙)回复于 2006-03-20 14:16:59 得分 0
for (;;);
while(1);
do{}while(1);
goto;
Top
5 楼JerKii(JERKII SHANG)回复于 2006-03-20 14:18:47 得分 0
使用JMP的硬编码,类似Thunk:
unsigned char code[] = {0xEB, 0xFE};
void (*fn) (void) = (void (*) (void)) &code[0];
fn ();
Top
6 楼JerKii(JERKII SHANG)回复于 2006-03-20 14:21:36 得分 0
不让都写些让人们一眼就可以看出是无限循环的代码阿 ...Top
7 楼yelling(Ray(←☆→射手))回复于 2006-03-20 14:25:03 得分 0
问题问的真是。。。。
Top
8 楼adintr(www.adintr.com)(风流总被雨打风吹去)回复于 2006-03-20 14:28:50 得分 0
void f()
{
f();
}Top
9 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-20 14:34:09 得分 0
搞那么复杂干啥?
_asm
{
next:
call next
}
Top
10 楼popy007(Twinsen)回复于 2006-03-20 14:36:02 得分 0
void f() {
if(++i%2)
f();
if(!(j++%2))
f();
}Top
11 楼popy007(Twinsen)回复于 2006-03-20 14:36:50 得分 0
adintr(www.adintr.com)
这样会导致堆栈溢出~~Top
12 楼xiaocai0001(高楼目尽欲黄昏/梧桐叶上萧萧雨)回复于 2006-03-20 15:06:10 得分 0
偶只用一招
while(true)
{;}Top
13 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2006-03-20 15:08:11 得分 0
while(true);
这么写多帅啊。。。
Top
14 楼JerKii(JERKII SHANG)回复于 2006-03-20 15:12:14 得分 0
很复杂吗?闲着没事干呗!:)Top
15 楼luoheth(好好学习)回复于 2006-03-20 15:15:01 得分 0
嵌套调用函数Top
16 楼lonelyforest(一生所爱)回复于 2006-03-20 15:19:26 得分 0
for (;true;);
不一样很帅么??Top
17 楼JerKii(JERKII SHANG)回复于 2006-03-20 15:59:40 得分 0
这也是一个无限循环:
for (unsigned char c = 0; c <= 0xFF; ++c);
:)Top
18 楼ugg(逸学堂(exuetang.net))回复于 2006-03-20 16:10:37 得分 0
main()
{
main();
}Top
19 楼JerKii(JERKII SHANG)回复于 2006-03-20 16:21:19 得分 0
无限递归终究是会栈溢出的!Top
20 楼JerKii(JERKII SHANG)回复于 2006-03-20 16:23:04 得分 0
healer_kx(甘草) 的方法也是一种递归!
_asm
{
next:
call next
}Top
21 楼JerKii(JERKII SHANG)回复于 2006-03-20 16:24:14 得分 0
汇编中还常用 JMP $ 来实现无限循环。Top
22 楼cattlenzq(吃狼的豆腐(不要给分了,散起来真麻烦!))回复于 2006-03-20 16:27:00 得分 0
_asm
{
loop:
goto loop
}Top
23 楼iamcaicainiao(老菜,长征)回复于 2006-03-20 17:22:11 得分 0
呵呵。偶的最丑了。楼逐见笑。Top
24 楼fabio210(狂笑江湖)回复于 2006-03-20 17:54:18 得分 0
还是while(1)好用。整那么多干啥。Top
25 楼zylthinking()回复于 2006-03-20 20:29:56 得分 0
2楼正解Top
26 楼antter(JiangMiao)回复于 2006-03-20 20:40:32 得分 5
restart.bat
shutdown /r
把restart.bat加入startupTop
27 楼dxjwolf(啸月孤狼)回复于 2006-03-20 20:48:51 得分 0
a: goto a;Top
28 楼nasi00(莫傲·逍遥)回复于 2006-03-20 21:08:28 得分 5
根据tpop的说法,无限循环在工程上只有
for(;;) {} 和 while(1) {} 两种写法
别的都没有太大意义...Top
29 楼JerKii(JERKII SHANG)回复于 2006-03-21 08:20:10 得分 0
当然,我们这里讨论的不是在工程上的应用。
而是想用我们所学到的各种知识来实现一个无限循环而已,纯属“学术讨论”:)
Everybody, go on please ...Top
30 楼tfrist(tfrist)回复于 2006-03-21 09:13:10 得分 0
_asm jmp $Top
31 楼huwei001982(michaelhuwei.cnblogs.com)回复于 2006-03-21 09:23:39 得分 0
循环.无限Top
32 楼Himulaxinta2(kenxin)回复于 2006-03-21 09:54:53 得分 0
无聊啊!
用的无非是:
for,while,递归,goto, 或者汇编中的类似方法罢了。
本来死循环就很无聊了,还要搞有多少方法,无聊!Top
33 楼cdo(Everything has a favourable turn)回复于 2006-03-21 09:55:24 得分 5
就用while(1);Top
34 楼icbm(雪狼)回复于 2006-03-21 10:11:28 得分 0
所有的指令最后都会编译成机器码,只需讨论一下最后生成的机器码有什么差别就可以了。
一般情况下,就是这么两种。其它的变种和它们生成的机器码是一样的。
for(;;){...}
do{...}while(1)
while(1){...}Top
35 楼jsjjms(专心研究嵌入式)回复于 2006-03-21 10:14:24 得分 0
用timer也可以,只要一直不关闭就是Top
36 楼303afei()回复于 2006-03-21 10:37:47 得分 5
_asm
{
push 当前指令地址
ret
}
Top
37 楼JerKii(JERKII SHANG)回复于 2006-03-21 10:38:28 得分 0
另外,大家有没有在自己的开发过程中由于自己的粗心导致的无限循环呢?
比如,我就曾经遭遇过,下面的错误(在前面我也经贴过了)。。。
for (unsigned char c = 0; c <= 0xFF; ++c)
{
...
}
大家务必不要重蹈覆辙哦!:)Top
38 楼JerKii(JERKII SHANG)回复于 2006-03-21 10:39:47 得分 0
303afei() 所说的这种情况我已经在2楼贴过了!
这也是我在编程时不小心犯的错误!Top
39 楼ruodeer(看我的个性签名都给我分)回复于 2006-03-21 10:48:47 得分 0
for(;;){...}
do{...}while(1)
while(1){...}
c++学习的时候有这三种循环机制Top
40 楼hai1039(天下)回复于 2006-03-21 10:57:34 得分 0
汇编里方法多一些.
1. 用各种跳转命令向前跳,如JA, JNE, JG等等,有近40种指令。
2. 修改cs,ip的值指向前方
3. 使用call, 然后修改堆栈返回地址
4. 将有效寻址空间内全部填上NOP
5. 设软中断自己,修改堆栈。
6. loop指令,并人工修改cx.Top
41 楼JerKii(JERKII SHANG)回复于 2006-03-21 12:02:45 得分 0
hai1039(天下) ,要是能写出代码出来不是更好?Top
42 楼beginnow()回复于 2006-03-21 12:11:34 得分 0
线程应该是一例Top
43 楼primercpp(初学者)回复于 2006-03-21 12:43:34 得分 0
pause();Top
44 楼qiuyu0619(秋雨)回复于 2006-03-21 12:53:06 得分 0
for(;;)
……
while(1)
while(2)
while(3)
……
太多了。。。Top
45 楼gkexy(孤客行云)回复于 2006-03-21 13:23:18 得分 0
push(a);
push(pop(a));Top
46 楼playdreamer(梦想|死亡|梦想|以未包二奶为耻)回复于 2006-03-21 14:09:35 得分 0
楼主换个说法:大家把以前不小心造成死循环,结果费时费力DEBUG的经历拿出来聊聊,这样能引起点共鸣。
说啥:多少种方法实现死循环,会让人感觉是在讨论‘怎么样更精妙的为蛇画4只脚’Top
47 楼iamcaicainiao(老菜,长征)回复于 2006-03-21 16:00:48 得分 0
还死循环着那?
最新通知,今天晚上断电。请保存好你的xx。Top
48 楼sparrow009(奇疯)回复于 2006-03-21 16:11:31 得分 0
哈哈、
Lz是不是编程编得郁闷了
:)Top
49 楼wu19821214(狗)回复于 2006-03-21 17:05:55 得分 0
好象都不行呀,计算机位数有限,怎么也有出问题的一天.Top
50 楼wgjmail(笑面佛)回复于 2006-03-21 17:18:31 得分 0
无聊Top
51 楼tzleo(绿豆狂潮)回复于 2006-03-21 17:21:58 得分 0
前面的都错拉,楼主要的是关机也不能中断的循环Top
52 楼tzleo(绿豆狂潮)回复于 2006-03-21 17:24:52 得分 0
你们的思路太狭窄,难道只有计算机才能循环吗Top
53 楼winyin(无名飞非)回复于 2006-03-21 17:54:34 得分 0
起床,吃饭,上班,吃饭,上班,吃饭,睡觉,重复,,
日复一日,年复一年,,重复到几十年后,挂掉...Top
54 楼winyin(无名飞非)回复于 2006-03-21 17:55:16 得分 0
接上面,
重复到"死",,
这才是真正的"死循环"...Top
55 楼maozigogo(毛毛)回复于 2006-03-21 19:56:39 得分 0
接上面
重复撞到屎
这才是真正的屎寻欢...Top
56 楼maozigogo(毛毛)回复于 2006-03-21 19:59:45 得分 0
技铝撞到屎
是乃 屎寻欢 也Top
57 楼realsmy(久城)回复于 2006-03-21 20:24:38 得分 0
呵呵~好多人啊~
我看不出有什么区别?~~~
while(1)
{
...
};
偶还是感觉这个比较实在...Top
58 楼turing(山坡羊)回复于 2006-03-21 20:50:46 得分 0
我觉得应该写两个程序
A程序把B程序起来,然后自己死掉
让后B又将A起来,自己死掉
或者两个电脑互掐,呵呵Top
59 楼manplus(魅力加加)回复于 2006-03-21 21:35:15 得分 0
好无聊的争论Top
60 楼dream2013(每个人都有魔鬼的一面( http://blog.sina.com.cn/u/1422260677 ))回复于 2006-03-22 12:41:07 得分 0
markTop




