这个循环如何工作以及它的目的是什么?

时间:2015-09-01 15:50:06

标签: c++11

我找到了用于循环的代码,如下所示:

//// Code
for(int i = 0; i < MAX; i++);
//// Code

我不明白这是做什么的,因为最后有;没有用括号{}括起来的代码块在循环期间执行。

在这种情况下如何工作以及它的目的是什么?

3 个答案:

答案 0 :(得分:3)

这是一个正常的for循环,它的身体什么都不做。为了更好地说明这一点,您可以更好地格式化它,以便了解它的工作原理:

for(int i = 0; i < MAX; i++)
{
   // Just chillin...
}

此循环的while表示是

int i = 0;
while(i < MAX)
{
  i++;
}

您可以移动for循环的递增步骤,使其看起来像是在执行某些操作:

for(int i = 0; i < MAX; )
{
   i++;
}

无限for循环可以很容易地写成如下:

for(;;);

这里甚至省略了循环计数器的初始化以及终止条件和递增步骤。

我同意@StenSoft - 这通常表明有人试图模拟某些工作。然而,以这种特殊方式做这样的事情的巨大流量是它非常依赖于你的计算机有多快。如果你的机器速度很慢,那么10000次循环的循环可能会很多,但是如果你有一个相对现代的循环,那么这个循环就会被吃掉,就像没什么。

如果要模拟工作,请使用sleep函数或您正在使用的平台和库提供的任何内容。

示例:

    符合POSIX.1-2001系统的
  • sleep

  • 使用Windows API的
  • sleep适用于Windows

重要的是要注意并非所有睡眠函数都具有相同的时间单位,因此必须小心并学习如何解释传递的参数 - 毫秒,秒等。

关于空块语句的一些其他示例:

if(SOME_CONDITION);

if(SOME_CONDITION);
else; // This might cause a warning if -Wempty-body is enabled

甚至

int a = 0;
switch(a)
{
  case 0:
    break;
}

如果它遵循语言的语法,则认为for,body等的正文是正确的。无论它是否做某事都是一个完全不同的问题。

答案 1 :(得分:1)

C ++中的for循环不需要代码块 - 单个语句就足够了。特别是,;是一个完美无缺的陈述。所以这个循环不会MAX次。大多数编译器可能完全删除无操作循环,具体取决于优化标志。

答案 2 :(得分:1)

在这种情况下:

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

for循环只增加i,直到它小于值MAX,然后执行进入下一行。

因此,这个for循环只会减慢程序的执行速度。

关于分号;

for(int i = 0; i < MAX; i++){
    // execute a statement;
}

可以写成:

for(int i = 0; i < MAX; i++){ // execute a statement; }

可以作为:

for(int i = 0; i < MAX; i++) // execute a statement;

没有执行声明时

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