@ dano :

Code: C
void fun(void) {
    int a, b, c;     /*definition 1 */
   
    while () {
       int b, c, d;     /*definition 2 */
                       ← 1
            while () {
                int c, d, e;     /* definition 3 */
                               ← 2
                   }
                                   ← 3
        }
                     ← 4
    }

Point 1 : (i) a is visible as per definition 1.
xxxxxxx#(ii) b is visible as per definition 2.
xxxxxxxx(iii) c is visible as per definition 2.
xxxxxxxx(iv) d is visible as per definition 2.

Point 2 : (i) a is visible as per definition 1.
xxxxxxx#(ii) b is visible as per definition 2.
xxxxxxxx(iii) c is visible as per definition 3.
xxxxxxxx(iv) d is visible as per definition 3.
xxxxxxx#(v) e is visible as per definition 3.

Point 3 : Same as Point 1.

Point 4 : (i) a is visible as per definition 1.
xxxxxxx#(ii) b is visible as per definition 1.
xxxxxxxx(iii) c is visible as per definition 1.

If you don't understand Static Scoping, look at the link I mentioned for shabbir (in the post above).