Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在第一个分号之前没有内容的for循环如何工作?_C - Fatal编程技术网

C 在第一个分号之前没有内容的for循环如何工作?

C 在第一个分号之前没有内容的for循环如何工作?,c,C,我遇到过这种循环,它们的工作方式与预期的一样,但我很想了解C编译器是如何看待这些循环的相当于以下内容: { a; while (b) { d; c; } } while (b) { d; c; } 因此,省略第一部分只会省略a,即初始化语句。因此,编译器将其视为等同于以下内容: { a; while (b) { d; c; } } while (b) { d; c; } 在for循环中,可以观察到以下

我遇到过这种循环,它们的工作方式与预期的一样,但我很想了解C编译器是如何看待这些循环的相当于以下内容:

{
  a;
  while (b)
  {
    d;
    c;
  }
}
while (b)  
{
  d;
  c;
}
因此,省略第一部分只会省略
a
,即初始化语句。因此,编译器将其视为等同于以下内容:

{
  a;
  while (b)
  {
    d;
    c;
  }
}
while (b)  
{
  d;
  c;
}

在for循环中,可以观察到以下三个阶段:

A();

while(B) {
    D();
    C();
}
(a;b;c)d

A:初始声明

这是在循环开始时执行的赋值或声明

B:循环规定

这是继续迭代必须为真的规定

C:迭代声明

这是在每次循环迭代之后发生的声明或赋值

D:循环体

这是在A和B之后但在C之前执行的循环体

顺序如下所示:

A();

while(B) {
    D();
    C();
}

for
语句的第一部分是初始化语句。它只是初始化一个循环变量。当其用途重复时,通常省略,例如:

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

这里再次强调,
p=buf
将是重复的。

C编译器如何看待这些循环。您想要AST还是什么?不,这两个答案回答了我的问题。