Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C]Variabile non riconosciuta

    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

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Manca questo

    #include "header.h"

    nel file function.c
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Ti ringrazio per la risposta.
    Con le modifiche da te proposte, ora il programma funziona.
    Una sola domanda: se includo l'header.h nella function.c, non "includo" in quest'ultima anche porzioni di codice che, in effetti, non mi sono utili? (come i prototipi di funzione)

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Gli header servono a mettere a conoscenza il compilatore dei tipi di dato e delle funzioni, ma non producono nessun effetto a livello del codice oggetto. Per lo più in function.c tu utilizzi la struttura definita nell'header e definisci le funzioni lì dichiarate.
    In ogni caso l'inclusione di un'header non implica nessun overhead.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.