'for'循环后分号的影响

use*_*323 7 c loops for-loop

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

for (i=0;i<5;i++);
Run Code Online (Sandbox Code Playgroud)

消息不会被打印5次,但是如果我不在那里放分号呢?

das*_*ght 24

分号是一个称为空语句 *的合法语句,意思是"什么都不做".由于for循环执行单个操作(可能是一个封闭的块{}),分号被视为循环体,导致您观察到的行为.

以下代码

 for (i=0;i<5;i++);
 {
     printf("hello\n");
 }
Run Code Online (Sandbox Code Playgroud)

解释如下:

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

正如您所看到的,重复的操作;不是printf.


*K&R,第1.5.2节

  • 分号不是"运算符".它终止了一个"语句",它对语句有效,不包含任何内容.一些编译器警告这一点,因为这是一个常见的错误.空括号`{}`是什么都不做的首选方法. (2认同)