Salve a tutti e buongiorno,
vi contatto per un piccolo problema che sto riscontrando in un progetto in C.

Il progetto è formato da tre file: main.c,function.c e header.c

Il problema è che, al momento della compilazione, mi da questo problema:

codice:
C:\Users\Marco\Desktop\PROGRAMMAZIONE II\Soluzioni esercizi laboratorio\02-06 Estrazuione signed e unsigned\function.c||In function 'confronto_unsigned':|
C:\Users\Marco\Desktop\PROGRAMMAZIONE II\Soluzioni esercizi laboratorio\02-06 Estrazuione signed e unsigned\function.c|6|error: 'word' undeclared (first use in this function)|
C:\Users\Marco\Desktop\PROGRAMMAZIONE II\Soluzioni esercizi laboratorio\02-06 Estrazuione signed e unsigned\function.c|6|note: each undeclared identifier is reported only once for each function it appears in|
C:\Users\Marco\Desktop\PROGRAMMAZIONE II\Soluzioni esercizi laboratorio\02-06 Estrazuione signed e unsigned\function.c||In function 'confronto_signed':|
C:\Users\Marco\Desktop\PROGRAMMAZIONE II\Soluzioni esercizi laboratorio\02-06 Estrazuione signed e unsigned\function.c|34|error: 'word' undeclared (first use in this function)|
C:\Users\Marco\Desktop\PROGRAMMAZIONE II\Soluzioni esercizi laboratorio\02-06 Estrazuione signed e unsigned\function.c|54|warning: control reaches end of non-void function [-Wreturn-type]|
C:\Users\Marco\Desktop\PROGRAMMAZIONE II\Soluzioni esercizi laboratorio\02-06 Estrazuione signed e unsigned\function.c||In function 'confronto_unsigned':|
C:\Users\Marco\Desktop\PROGRAMMAZIONE II\Soluzioni esercizi laboratorio\02-06 Estrazuione signed e unsigned\function.c|26|warning: control reaches end of non-void function [-Wreturn-type]|
||=== Build finished: 2 errors, 2 warnings (0 minutes, 0 seconds) ===|
Vi allego anche i tre file:

main.c :
codice:
#include <"header.h">

int main()
{

//Dichiarazione
      int ris;
      register int mask;
      unsigned short int scelta;

//Menu' di scelta
      puts("Quale tipo vuoi inserire?");
      puts("Carattere [0]");
      puts("Short [1]");
      puts("Long [2]");
      scanf("%d",&scelta);
      fflush(stdin);

switch(scelta){
case 0:
          mask=0xFF;                      //Costruzione della maschera

          puts("\nDigita un carattere");
          scanf("%c",&word.C[0]);         //Lettura

          word.C[2]=mask&word.C[0];       //Estrazione bit

          printf("\nValore estratto %d\n",word.C[2]);

          printf("Se i valori sono uguali, il risultato sara' 1, altrimenti 0");
          printf("\nConfronto unsigned: %d\n",confronto_unsigned(scelta));
          printf("Confronto signed: %d\n",confronto_signed(scelta));
          break;
case 1:
          mask=0xFFFF;

          puts("\nDigita un numero short");
          scanf("%ld",&word.S[0]);

          word.S[2]=mask&word.S[0];

          printf("\nValore estratto %d\n",word.S[2]);

          printf("Se i valori sono uguali, il risultato sara' 1, altrimenti 0");
          printf("\nConfronto unsigned: %d\n",confronto_unsigned(scelta));
          printf("Confronto signed: %d\n",confronto_signed(scelta));
          break;
case 2:
          mask=0xFFFFFFFF;

          puts("\nDigita un numero long");
          scanf("%ld",&word.L);

          ris=mask&word.L;

          printf("Valore estratto %d\n",ris);

          printf("Se i valori sono uguali, il risultato sara' 1, altrimenti 0");
          printf("\nConfronto unsigned: %d\n",confronto_unsigned(scelta));
          printf("Confronto signed: %d\n",confronto_signed(scelta));
          break;
}

      system("pause");
      return 0;
}
function.c
codice:
unsigned short int confronto_unsigned (unsigned short int caso)
{
         switch (caso)
         {
            case 0:
               if ((unsigned char)word.C[0] == word.C[2])
                 return 1;
               else
                 return 0;
            break;

            case 1:
               if ((unsigned short)word.S[0] == word.S[2])
                 return 1;
               else
                 return 0;
            break;

            case 2:
               if ((unsigned long *)&word.L == word.L)
                 return 1;
               else
                 return 0;
            break;
       }
}

//Function che effettua un confronto signed
unsigned short int confronto_signed (unsigned short int caso)
{
         switch (caso)
         {
            case 0:
               if ((signed char)word.C[0]==word.C[2])
                 return 1;
               else
                 return 0;
            break;

            case 1:
               if ((signed short)word.S[0]==word.S[2])
                 return 1;
               else
                 return 0;
            break;

            case 2:
               if ((signed long)word.L==word.L)
                  return 1;
               else
                  return 0;
            break;
       }
}
header.h
codice:
#include <stdio.h>
unsigned short int confronto_unsigned (unsigned short int);
unsigned short int confronto_signed (unsigned short int);
union word32bit
{
      long L;
      short S[2];
      char C[4];
} word;
Per quale motivo genera questo errore?
Grazie mille e scusatemi della perdita di tempo.

Cordiali saluti,
Marco