【发布时间】:2019-05-11 21:32:06
【问题描述】:
所以我有这个程序我想了解,它来自一个旧考试,但我无法掌握它。我如何知道分叉的顺序以及变量如何更改?
static int g = -1;
int main(int argc, char *argv[])
{
int v = 0;
pid_t p;
while (v++ < 6)
if ((p = fork()) < 0) {
perror("fork error");
return 1;
} else if (p == 0) {
v++;
g--;
} else {
g++;
v+=3;
if (waitpid(p, NULL, 0) != p) {
perror("waitpid error");
return 1;
}
}
printf("mypid = %d parentpid = %d p = %d v = %d g = %d\n",
getpid(), getppid(), p, v, g);
return 0;
}
【问题讨论】:
-
如果缩进一致,可能会更容易阅读。在
while下对齐的}实际上属于} else {块。这并不可怕,但也不对。我希望在整个循环体周围看到一组额外的大括号,但从技术上讲,它不是必需的。 -
简答:没有顺序。
-
@JonathanLeffler 我直接从考试中复制了它,我猜他们这样做只是为了混淆。