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

C while循环仅在语句为true时运行?,c,loops,if-statement,while-loop,C,Loops,If Statement,While Loop,我在看一些C代码,我发现了这一行 if (temp==NULL) while (1) ; 根据我的理解,当你进入一个无限循环时,除非你打破它,否则就没有出路,这是如何工作的?如果if语句不为NULL,它是否会中断如果是,是什么让它不断地检查if语句 有关更多信息,请查看realboy源代码,文件为gboy_lcd.c 第304行 这是一个非常稳定和优秀的gameboy仿真器,但是对于linux来说,如果temp为NULL,这段代码会启动一个while循环 while循环反复计算表达

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

if (temp==NULL)
    while (1) ;
根据我的理解,当你进入一个无限循环时,除非你打破它,否则就没有出路,这是如何工作的?如果if语句不为NULL,它是否会中断如果是,是什么让它不断地检查if语句

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

第304行


这是一个非常稳定和优秀的gameboy仿真器,但是对于linux

来说,如果
temp
NULL
,这段代码会启动一个while循环

while循环反复计算表达式(1),每次都不执行任何操作,直到1!=这永远不会发生

用Allman Stringing写得更清楚,说明:

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

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

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

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


要真正确定这是否是一种有用的行为,需要更多的上下文。

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

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


PS-为什么否决-这是一个好问题

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

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

我编写了这个模拟器,虽然您正在查看的版本非常旧,但我还没有消除这个“缺陷”。请看这里:

有问题的函数现在称为“vid_frame_update()”。具体来说,第141行。随着超级游戏男孩支持的增加,该“缺陷”也在第102行复制

如果您查看第168行的函数('vid_start()'),您将看到'temp'的可能(指针)值是一次性分配的(它们是x1到x4以及sgb_1到sgb_4),因此应该在这里进行错误分配的测试。然而,我记得当时我有一些奇怪的行为,添加“缺陷”只是为了调试

对于给您带来的不便,我很抱歉,但我很高兴发生了这种情况,因为我从来没有想过像这样的小事会引起混乱(也许我只是从来没有想到有人会真正查看代码)。下次最好小心点,呵呵


谢谢。

没错,一旦你陷入了while循环,你就永远在其中了。也许if语句应该在while循环中,但是你仍然需要休息。用源文件更新了问题,它似乎工作得很完美。我没有编写它,只是第一次看到这样的东西。这很有意义,因此,无论发生什么情况,它都不会进入临时状态,但如果它进入临时状态,则会使程序冻结,使其感觉好像出了问题。我猜你不能进入信号处理程序吗?我不是专家,但micros是否经常有停止或重置指令来调用?我没想到这里会有无限的循环。我想这会让芯片过热。