Assume the most closely nesting scope rule for resolving uses and that each function introduces one new scope for both its parameters and local variables.
int X; double Y; int F (char X, int Z) { char Y; /* (A) */ { double X, Y; int W; /* (B) */ } char W; /* (C) */ } /* (D) */ double G (int Z) { char X; f(X,Z); /* (E) */ }