Meilleure réponse
global & local: est lié à la portée, cest-à-dire où peut être utilisé
static: est lié au temps et à la volatilité, cest-à-dire combien de temps peut être utilisé
La variable statique du programme C & C ++ est définie (mémoire allouée et valeur initiale zéro) une seule fois, même le contrôle du programme exécute à nouveau linstruction de déclaration. La valeur et la durée de vie de la variable statique sont conservées jusquà la fin du programme, mais elles peuvent être utilisées à lintérieur de la portée.
 void staticTest(){ 
  static int i; 
  printf("\%d\n",i); 
  i++; 
 } 
 void main(){ 
  staticTest(); 
  staticTest(); 
  staticTest(); 
 } 
Résultat:
0
1
2
Dans lexemple ci-dessus, lutilisation dune variable statique locale est démontrée.
statique globale: vous pouvez déclarer une variable statique dans une portée globale et elle sera presque identique à une autre variable globale sauf quelle a une valeur initiale égale à zéro, si vous ne lui attribuez aucune valeur.
Réponse
Statique locale:
- La valeur par défaut est zéro
 - Stocké dans la section des données (bss ou initialisé) de la mémoire
 - La portée ou la visibilité se trouve dans le bloc ou une fonction
 - La vie de la variable statique locale commence et se termine uniquement avec le programme.
 
Global static:
- Si une variable globale est statique, la portée ou la visibilité se trouve uniquement dans ce fichier, même lutilisation dextern dans un autre fichier ne fonctionnera pas . Cela donne une erreur de liaison.
 
Exemple 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