PDA

View Full Version : [C++] typedef dubbi


sharkkk
22-10-2013, 11:03
Esempio 1:
struct Nodo{
int key;
struct Nodo* next;
};

typedef Nodo* Lista;
...

Esempio 2:
int high_score ;
typedef int points;
points high_score;
...

Scusate non ho ben capito l'uso di typedef; Ho capito che si possono rinominare i tipi di dato ma in questi due esempi mi perdo.
Vi spiego:

-Nel secondo esempio rinomino con il typedef int in points, dove int è un tipo.

-Nel primo esempio rinomino con il typedef Nodo* in Lista, dove Nodo* a quanto pare è un tipo, ma in teoria il tipo non dovrebbe essere struct?
I tipi di dato non sono struct, int, float, ecc ecc ecc? Nodo* non dovrebbe essere una variabile puntatore struct?

Nel primo caso la sintassi non doveva essere quindi:
typedef struct lista;

dove sbaglio?
Grazie mille

vendettaaaaa
22-10-2013, 12:20
Esempio 1:
struct Nodo{
int key;
struct Nodo* next;
};

typedef Nodo* Lista;
...

Esempio 2:
int high_score ;
typedef int points;
points high_score;
...

Scusate non ho ben capito l'uso di typedef; Ho capito che si possono rinominare i tipi di dato ma in questi due esempi mi perdo.
Vi spiego:

-Nel secondo esempio rinomino con il typedef int in points, dove int è un tipo.

-Nel primo esempio rinomino con il typedef Nodo* in Lista, dove Nodo* a quanto pare è un tipo, ma in teoria il tipo non dovrebbe essere struct?
I tipi di dato non sono struct, int, float, ecc ecc ecc? Nodo* non dovrebbe essere una variabile puntatore struct?

Nel primo caso la sintassi non doveva essere quindi:


dove sbaglio?
Grazie mille
struct e class sono keywork che indicano che il nome immediatamente seguente (struct Nodo; class Car) è il nome di un tipo definito dall'utente (user-defined type).
Quindi no, struct non è un tipo. int, double ecc sì, così come Nodo (e anche Nodo*).

Io scriverei l'esempio 1 così:
struct Nodo{
int key;
Nodo* next; // senza struct, non serve
};

typedef Nodo* Lista;
...
Non ho mai ben capito l'uso ripetuto di struct, credo sia una prassi derivata dal C, dove per ragioni di visibilità bisognava dire esplicitamente al compilatore che il tipo che stavi usando è una struct, ma in C++ di sicuro non serve.

vendettaaaaa
22-10-2013, 14:53
semplicemente in C struct X non definisce un nuovo tipo X, ma il tipo rimane struct X..
Ah ok :) Allora quello scritto dall'utente è codice C in un thread taggato C++. E immagino che i compilatori C++ accettino la ripetizione di struct X proprio per retrocompatibilità, giusto?