x before foo: 444 x after foo: 444
Comments:
The linker creates and initializes external variables
when it creates the executable file.
There is just one external variable x
in this project, which is initialized to 444
before execution begins.
When foo()
executes,
it changes its local variable x
.
But this x
has no linkage and
is a different x
than the external one.
It also has block scope, which hides the other
x
in fileB.c in that scope.
/* --- fileB.c --- */ int x = 444 ; /* This x has file scope, external linkage */ foo() { int x; /* This x has block scope, no linkage. */ x = 99; /* It is a different x than the previous */ }
/* --- fileC.c --- */ int x ; /* This x has file scope, external linkage. */ /* It is the same x as the one initialized to 444 */ main() { printf("x before foo: %d\n", x ); foo(); printf("x after foo: %d\n", x ); system("pause"); }