这是代码:
int main(int argc, char *argv[ ]){
int x = 33;
if(!fork()){
int x = 10;
printf("%d\n", x);
}
fork();
printf("%d\n", x);
return 0;
}
我会假设,因为原始子项的 int 值发生了变化,所以它的值是 10,并且在第二个 fork 中也是如此(fork();),因此原始子项及其子项打印 10,因此输出如下这个:33 33 10 10 10 但似乎虽然 int 的值在 if 内部发生了变化,但子进程却取回了 x 的原始值,即 33,并且在第二次 fork 后都打印了 33(所以输出是这样的: 33 33 10 33 33。为什么是吗?(我相信 与此无关)
x
块内第一个printf
中打印的if
是用以}
结束的局部作用域定义的。第二个 printf
使用 x
主体范围内定义的 main
,该主体仍具有初始值 33
。
您在两个不同的范围内定义了两个
x
。一个位于 if
内部,当程序退出该范围时,它停止存在。