什么是" Dummy for Loop"在C?

时间:2014-11-15 08:24:31

标签: c

当我们回到家时,我的一位朋友问我这个问题。他从老师那里了解到了这一点。首先,他告诉我它的东西就像没有身体的无限循环。因此我在这里发布了这个问题,询问 无限循环 是否被称为虚拟for循环。

在我读过的任何一本书中,我都没有看到像Dummy For这样的东西,也没有在互联网上看过。后来他告诉我那些包含空白体的循环被称为虚拟循环。一个像这样:

for (int i=0; i<10; ++i);

在某些情况下,这样的循环非常有用。我更渴望知道软件开发领域是否确实存在某些东西,或者它只是个人给出的名称。

很抱歉编辑细节有所延误。

4 个答案:

答案 0 :(得分:3)

这是一个没有身体的无限循环。目的是确保程序不会结束,但什么都不做。它也被称为空闲循环。

这并不意味着什么都不会发生。可能仍然会发生中断,这会导致cpu跳出循环,并在中断服务程序结束后返回循环。

这种技术通常用于嵌入式编程,其中输入和定时器触发中断,其中发生所有活动。当没有中断服务时,我们希望确保程序不会在代码结束时运行。

答案 1 :(得分:1)

无限循环。这样可以永久地运行for循环。 只是提到它的使用。可能需要用户不断输入一些数据,当发现某些特定匹配时,你需要突破它。

相似
while(1)
{
}

示例:

while(1)
{
    printf("Enter a number\n");
    scanf("%d",&a);
    flag = 0;
    switch(a)
    {
        case 1:
        printf("hi\n");
        break;
        case 2:
        flag = 1;
        break;
    }
    if(flag)
    break;
}
printf("Out of while loop\n");
}

答案 2 :(得分:0)

给出dummyloop.c

int main(int args, char ** pargs)
{
  for(;;);
}

gcc -g -c dummyloop.c

objdump -d -M intel -S dummyloop.o

dummyloop.o:     format de fichier elf64-x86-64


Déassemblage de la section .text:

0000000000000000 <main>:

int main(int args, char ** pargs)
{
   0:   55                      push   rbp
   1:   48 89 e5                mov    rbp,rsp
   4:   89 7d fc                mov    DWORD PTR [rbp-0x4],edi
   7:   48 89 75 f0             mov    QWORD PTR [rbp-0x10],rsi
  for(;;);
   b:   eb fe                   jmp    b <main+0xb>

b: jmp b 无限循环

我们通常希望避免使用主动无限循环。

答案 3 :(得分:0)

你描述的 for(;;); 的循环是一个无限循环,因为它没有定义任何内容。

表示(初始化;条件;递增/递减); 称为dummy for loop

它的工作原理如下:

';'具有唯一标识号0(NULL)。

当我们在for循环结束时添加分号时,它将充当for循环的主体。因此,for循环将不执行任何操作(分号)。

  1. 现在,如果有for参数传递给for循环,比如说(i=0;i<=10,i++);那么它会运行10次并且什么都不做。

  2. 如果没有传递参数,for( ; ; );那么它是一个无限循环而且什么都不做。

  3. 它因为分号而被称为“虚拟”,因为它什么都不做。