こいつをご覧くだせー。

#include <stdio.h>
#define VIEW() printf("a = %d\n", a)

int a = 0;
void func(void);

int main(int argc, char *argv[]){
 int a = 10;
 VIEW();
 {
  int a = 20;
  VIEW();
 }
 VIEW();
 func();
 ::a = 30;  /* (1) */
 func();
 return 0;
}

void func(void){
 VIEW();
 return;
}

まあ、見ていただければわかると思うが、変数名についての実験を行った。
グローバル変数と同じ名前のローカル変数を使うと、そのグローバル変数を参照するには :: を使えばよい。
ところで、この :: (グローバル名前空間) って純粋 C でも使える?