The following program shows how the values of data objects change in nested statement blocks:
1 #include <stdio.h>
2
3 int main(void)
4 {
5 int x = 1; /* Initialize x to 1 */
6 int y = 3;
7
8 if (y > 0)
9 {
10 int x = 2; /* Initialize x to 2 */
11 printf("second x = %4d\n", x);
12 }
13 printf("first x = %4d\n", x);
14 }
The program produces the following output:
second x = 2 first x = 1
Two variables named x are defined in main. The definition of x on line 5 retains storage while main is running. However, because the definition of x on line 10 occurs within a nested block, line 11 recognizes x as the variable defined on line 10. Because line 13 is not part of the nested block, x is recognized as the variable defined on line 5.