Mejor respuesta
global y local: está relacionado con el alcance, es decir, dónde se puede usar
estático: está relacionado con el tiempo y la volatilidad, es decir, cuánto tiempo se puede usar
La variable estática en el programa C & C ++ se define (memoria asignada y valor inicial cero) solo una vez, incluso el control del programa ejecuta la declaración de declaración nuevamente. El valor y la vida de la variable estática se retiene hasta el final del programa, pero se puede usar dentro del alcance.
 void staticTest(){ 
  static int i; 
  printf("\%d\n",i); 
  i++; 
 } 
 void main(){ 
  staticTest(); 
  staticTest(); 
  staticTest(); 
 } 
Salida:
0
1
2
En el ejemplo anterior se demuestra el uso de la variable estática local.
global static: puede declarar una variable estática en el alcance global y será casi igual que otra variable global excepto que tiene un valor inicial como cero, si no le asigna ningún valor.
Respuesta
Estático local:
- El valor predeterminado es cero
 - Almacenado en la sección de datos (bss o inicializado) de la memoria
 - El alcance o la visibilidad está dentro del bloque o una función
 - La vida de la variable estática local comienza y solo termina con el programa.
 
Global static:
- Si una variable global es estática, el alcance o la visibilidad están dentro de ese archivo solamente, incluso el uso de extern en otro archivo no funcionará . Da error de vinculación.
 
Ejemplo 1:
 static int a=20; 
 void xyz() 
 { 
  printf("\%d, ", a); 
  a = 100; 
 } 
 int main() 
 { 
  printf("\%d, ", a); 
  { 
  static int a = 10; 
  printf("\%d, \n", a); 
  xyz(); 
  } 
  printf("\%d", a); 
 } 
 // Output is 20, 10, 20, 100