繁体   English   中英

对(;;)意味着什么?

[英]What does for(;;) mean?

我对for(;;)构造感到困惑。 我认为这是一种无限循环的速记形式,但我不能确定。

这是代码:

for(;;)
{
    //whatever statements
}

你的猜测是正确的; 这是一个无限循环。 *这是一种常见的C语言,虽然许多人(包括我)认为以下内容不那么神秘:

while (1) { whatever statements; }


*假设没有break / return /等等,这是无限的。 循环体内的语句。

这是一个未终止的循环。 它有时会写一段while

while (1)

甚至更好:

while (true)

我希望在任何这样的循环中看到breakreturn ,无论是用for还是while写的。 必须有一些异常的控制流程,否则它实际上将是一个无限循环。

是的,这就是for C语法与初始化表达式,循环条件和增加表达的空白领域。

for语句也可以使用多个值,如下例所示:

for (i=0, j=100, k=1000; j < 500 || i<50 || k==5000; i++, j+=2, k*=6) {}; 

也许还有一步for理解? =)

是的,for循环中的表达式只是可选的。 如果你省略它们,你将得到一个无限循环。 离开的方法是休息或退出等。

据我所知,for(;;)创建了一个故意的非退出循环。 您的代码应根据一个或多个条件退出循环。 它曾经作为一种更纯粹的方式提供给我做一个假的循环,这不被认为是好的语法。 例如,基于退出条件,更容易分派到函数来处理结果,失败,警告或成功。

我的解释可能不是某人使用该构造的原因,但我会更详细地解释它对我意味着什么。 这个结构可能是某人的“纯C”方式,有一个循环,你可以在其中连续执行多个步骤,其完成意味着你的应用程序执行了所有初始化步骤。

#define GEN_FAILURE -99
#define SUCCESS 0

/* perform_init_step1() and perform_init_step2() are dummy 
   place-holder functions that provide a complete example. 
   You could at least have one of them return non-zero
   for testing. */

int perform_init_step1();
int perform_init_step2(); 

int perform_init_step1()
{ 
   return 0;
}

int perform_init_step2()
{
   return 0;
}   
int ret_code = GEN_FAILURE;
for(;;)
{
   if(SUCCESS != perform_init_step1())
   {
     ret_code = -1;
     break;
   }

   if(SUCCESS != perform_init_step2())
   {
     ret_code = -2;
     break;
   }

   break;
}

如果部分初始化失败,则循环将使用特定的错误代码进行终止。

我使用C进行了很多固件工作,用汇编语言编写。 优秀的汇编语言程序员教会我有一个入口点和单个出口。 我把他们的建议铭记于心,因为他们的信条在调试时极大地帮助了他们和我。

就个人而言,我从不喜欢for(;;)构造,因为如果你忘记打破,你可以拥有一个无限循环; 在最后。

我和之合作的人想出了do..until(FALSE),但这引起的适当C风格的数量是不可信的。

#define GEN_FAILURE -99
#define SUCCESS 0

/* perform_init_step1() and perform_init_step2() are dummy 
   place-holder functions that provide a complete example. 
   You could at least have one of them return non-zero
   for testing. */

int perform_init_step1();
int perform_init_step2(); 

int perform_init_step1()
{ 
   return 0;
}

int perform_init_step2()
{
   return 0;
}   

int ret_code = GEN_FAILURE;


do
{
   if(SUCCESS != perform_init_step1())
   {
     ret_code = -1;
     break;
   }

   if(SUCCESS != perform_init_step2())
   {
     ret_code = -2;
     break;
   }

}

until (FALSE);

无论怎样,这都会运行一次。

这句话基本上等于:

while(1) {}

没有开始,没有条件,也没有步骤声明。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM