当我们回到家时,我的一位朋友问我这个问题。他从老师那里了解到了这一点。首先,他告诉我它的东西就像没有身体的无限循环。因此我在这里发布了这个问题,询问 无限循环 是否被称为虚拟for循环。
在我读过的任何一本书中,我都没有看到像Dummy For这样的东西,也没有在互联网上看过。后来他告诉我那些包含空白体的循环被称为虚拟循环。一个像这样:
for (int i=0; i<10; ++i);
在某些情况下,这样的循环非常有用。我更渴望知道软件开发领域是否确实存在某些东西,或者它只是个人给出的名称。
很抱歉编辑细节有所延误。
答案 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
循环将不执行任何操作(分号)。
现在,如果有for参数传递给for循环,比如说(i=0;i<=10,i++);
那么它会运行10次并且什么都不做。
如果没有传递参数,for( ; ; );
那么它是一个无限循环而且什么都不做。
它因为分号而被称为“虚拟”,因为它什么都不做。