‘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