Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    [C] Dichiarazione strana.

    Salve, stavo leggendo del codice C e mi sono trovato delle dichiarazioni che non capisco.
    In un primo file header file.h c'è la seguente:
    codice:
    typedef struct struttura_pippo {
    .
    .
    } PIPPO;
    il cui significato dovrebbe essere dichiara la variabile PIPPO di tipo struttura_pippo che è una ridefinizione di struct.

    In un secondo file c c'è la seguente dichiarazione:
    codice:
    #include "file.h"
    .
    .
    PIPPO *point=NULL;
    La mia perplessità nasce dalla dichiarazione della variabile point che dovrebbe essere di tipo struttura_pippo e non PIPPO.
    Mi sbaglio?
    Grazie per le osservazioni.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non consideri la parola

    typedef

    Quindi la prima parte e'

    definisce un *nuovo tipo di dati*, chiamato PIPPO, equivalente alla struttura dati indicata.

    Quindi point diventa un puntatore al nuovo tipo di dato.

  3. #3
    Quindi questo:
    codice:
    typedef struct struttura_pippo {
    .
    .
    } PIPPO;
    è diverso da questo:
    codice:
    typedef struct struttura_pippo;
    struttura_pippo  PIPPO{
    .
    .
    };
    ???

    Se così fosse, il significato sarebbe:
    Definisci PIPPO come struttura di tipo struct struttura_pippo {. . .}.

    Ma allora non era più logico scrivere direttamente:
    codice:
    struct PIPPO {
    .
    .
    };
    Senza bisogno di typedef e struttura_pippo???

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Ol3iconfini
    codice:
    typedef struct struttura_pippo;
    Questa scrittura e' sbagliata ... Quale tipo di dati stai definendo come sinonimo della struttura? Qual e' la struttura?

  5. #5
    Giusto per chiarire, c'è differenza tra questa:
    codice:
    typedef struct struttura_pippo {
    int a;
    int b;
    } PIPPO;
    e questa:

    codice:
    struct PIPPO {
    int a;
    int b;
    };
    ????

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Beh ... sì

    Nella prima scrittura la struttura si chiama

    struttura_pippo

    e nella seconda la struttura si chiama

    PIPPO

    Sempre nella prima scrittura hai dichiarato un nuovo tipo di dati chiamato PIPPO che e' sinonimo della struttura.

  7. #7
    Ma quindi, scusa, a che serve questo "doppione" di tipo (visto che dichiaro una struttura di tipo struttura_pippo e immediatamente anche il suo doppione PIPPO)??
    Non si faceva "prima" e in maniera più "chiara" a dichiarare direttamente la struttura in un nome o nell' altro evitando il typedef?

    Questa cosa non la capisco visto che poi, nei restanti file si utilizza sempre il tipo PIPPO e mai struttura_pippo.

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    codice:
    typedef struct struttura_pippo {
    .
    .
    } PIPPO;
    1) Così come è dichiarato il tutto, potresti creare variabili in questo modo:

    struct struttura_pippo var1;

    o

    PIPPO var2;

    2) 'struttura_pippo' si può anche omettere, se si vuole usare solo PIPPO:
    codice:
    typedef struct {
    .
    .
    } PIPPO;
    (così crei un nuovo tipo PIPPO a partire da una struttura "anonima").

    3) Sarebbe la stessa cosa fare:
    codice:
    struct struttura_pippo {
    .
    .
    };
    e poi
    codice:
    typedef struct struttura_pippo PIPPO;
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da Ol3iconfini
    Questa cosa non la capisco visto che poi, nei restanti file si utilizza sempre il tipo PIPPO e mai struttura_pippo.
    Se non userai mai

    struct struttura_pippo

    ma solamente il sinonimo dichiarato (PIPPO) allora puoi scrivere

    codice:
    typedef struct {
    .
    .
    } PIPPO;
    (usando la struttura anonima cosi' come indicato da andbin)

    Ma e' una tua scelta ... e al compilatore non importa se, al contrario, vuoi comunque dare un nome alla struttura.

  10. #10
    Quindi come pensavo, è un "doppione" di tipo...

    Come ti dicevo questo codice è in mano mia e lo stavo leggendo per integrarlo, e non riuscivo/riesco a capire quella scelta del "doppione"...

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 © 2025 vBulletin Solutions, Inc. All rights reserved.