Utilité des variables globales
Soit un programme qui manipule un fichier de points, on veut que le fichier soit connu des fonctions manipulant le fichier.
Deux solutions:

Variable globale: cas 1  le programme est constitué d'un seul fichier source et on veut partager des données entre le main et les fonctions.  
#include<stdio.h>
typedef struct {
                      int x;
                      int y;
                     } point;
static FILE* leFichier;
/* la variable leFichier est globale au fichier*/
int rechercher(point pRech)

{
 int fin;
 int retour = 0;
 point p;
 fin = fscanf(leFichier, "(%d,%d)\n", &p.x,&p.y);
 while (fin != EOF && retour == 0)
      {            
        if (pRech.x = = p.x && pRech.y = = p.y)
           retour = 1;
        else       
              fin = fscanf(leFichier,"(%d,%d)\n", &p.x,&p.y);
      }
return (retour);
}

int main(void)
{
 point lePoint;
 int result;
 char nomFichier[40];
 printf("Donner le nom du fichier");
 gets(nomFichier);
 leFichier = fopen(nomFichier, "rt");
 if (leFichier = = NULL)  printf ("Erreur ...");
 else
   {
    printf("Donner les coordonnées (x,y) du point à rechercher");
    scanf("(%d,%d)", &(lePoint.x), &(lePoint.y));
     result = rechercher(lePoint);
     if (result)
        printf("\nLe point a été trouvé ...");
     else
        printf("\nLe point n a pas été trouvé ...");
    }
fclose(leFichier);   /* ferme le fichier */
}

suivant          plan