C while循环只在if语句为true时运行?

时间:2014-03-07 21:54:02

标签: c loops if-statement while-loop

我正在查看一些C代码,我发现了这一行。

if (temp==NULL)
    while (1) ;

根据我的理解,当你进入一个无限循环时,除非你打破,否则没有出局,这是如何工作的?如果if语句不为NULL,它是否会中断,如果是这样,是什么让它一遍又一遍地检查if语句?

有关更多信息,请查找realboy源代码,该文件为gboy_lcd.c

线304
https://github.com/guilleiguaran/realboy/blob/ed30dee751c3f78964e71930a8f87d2074362b9b/gboy_lcd.c

虽然对于Linux来说它是一个非常稳定和优秀的gameboy模拟器

6 个答案:

答案 0 :(得分:6)

基本上有人正在停止该计划。如果temp为NULL,则程序将在while语句中进入无限循环。我希望在代码中看到一条评论,说明他为什么要这样做。

这在嵌入式/微代码(即运行电视机,冰箱,烟雾探测器等的代码)中很常见,因为无法停止/崩溃/警报。你唯一能做的就是循环。在开发过程中,您可以使用调试器来查看代码以查看发生的事情

PS - 为什么是downvotes-这是一个很好的问题

答案 1 :(得分:5)

如果tempNULL,则此代码会启动while循环。

while循环一遍又一遍地计算表达式(1),并且每次都不执行任何操作,直到1!= 1,这将永远不会发生。

用Allman支撑写得更清楚了:

if (temp == NULL)
{
    while(1)
    {
    }
}

正如评论中所指出的,此版本显示if不属于while

答案 2 :(得分:2)

一旦完成检查并进入while循环,就无法检查temp的值。

答案 3 :(得分:1)

假设没有外部中断发送到进程/线程,如果if块成功,while循环实际上将永远运行。你是对的:没有摆脱那个循环。

要实际确定这是否有用,需要更多的上下文。

答案 4 :(得分:1)

我写了这个模拟器,虽然你看的版本已经很老了,但我还没有摆脱这个'缺陷'。请看一下这里:http://sourceforge.net/p/realboy/code/ci/master/tree/src/gboy_video.c

现在称为违规功能' vid_frame_update()'。具体来说,第141行。随着超级游戏男孩的支持,这个'缺陷'也在第102行复制。

如果你看一下第168行的功能(' vid_start()'),你会看到' temp'的可能(指针)值。一次性分配(这些是x1到x4和sgb_1到sgb_4),所以应该在这里进行错误分配的测试。然而,我记得我有一些奇怪的行为并添加了“瑕疵”。仅用于调试目的。

我很抱歉给您带来不便,但我很高兴这件事发生了,因为我从来没有像这样微不足道的事情可能是混乱的源头(也许我只是从来没有人会真正看到代码)。下次最好小心点,呵呵!

感谢。

答案 5 :(得分:0)

这应该更容易理解,一旦if成功,它进入while循环,在一个连续的循环中迭代,

if (temp==NULL){
  while (1) { }
}