‘for’循环后分号的影响

假设我想使用for循环在C中打印五次消息。 为什么如果我在for循环之后添加一个分号,如下所示:

 for (i=0;i<5;i++); 

邮件没有被打印5次,但是如果我不在那里放分号呢?

分号是一种称为空语句 *的合法语句,意思是“什么都不做”。 由于for循环执行单个操作(可能是{}包含的块),因此分号被视为循环体,从而导致您观察到的行为。

以下代码

  for (i=0;i<5;i++); { printf("hello\n"); } 

解释如下:

  • 重复五次for (i=0;i<5;i++)
  • ......什么都不做(分号)
  • 为局部变量打开一个新范围{
  • ...打印“你好”
  • 关闭范围}

如您所见,重复的操作是; 而不是printf


*见K&R ,第1.5.2节

 for (i=0;i<5;i++); 

相当于

 for (i=0;i<5;i++){} 

该声明仅包括; token被称为null语句 ,它只是……没有。

例如,这是有效的:

 void foo(void) { ; ; ; } 

它可以在任何可以使用语句的地方使用,例如:

 if (bla) ; else ; 

参见C标准段落:

(C99,6.8.3p3)“空语句(仅由分号组成)不执行任何操作。”

下面的代码将打印“Hello”5次..

  for(i=0;i<5,printf("Hello\n");i++); 

在for循环之后放置分号时,许多编译器显示语法错误但是根据gcc编译器(Linux)或Dev-cpp,您可以在for循环后放置分号,它不会显示任何错误。

例如

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

要么

 for(int i=0;i<=5;i++) {//blank body} 

从上面的例子可以看出,如果我们在for循环之后放入空格括号或分号,这意味着我们还没有输入任何变量。

现在回答你的问题。
如果要打印hello五次,则必须将程序编写为

 for(int i=0;i<5;i++) { printf("hello"); } 

我希望你明白
干杯!!
Rahul Vashisth