• Non ci sono risultati.

TIPI DEFINITI DALL’UTENTE

N/A
N/A
Protected

Academic year: 2021

Condividi "TIPI DEFINITI DALL’UTENTE"

Copied!
7
0
0

Testo completo

(1)

TIPI DEFINITI DALL’UTENTE

L’utente può introdurre nuovi tipi tramite una definizione di tipo.

La definizione associa ad un identificatore (nome del tipo) un tipo di dato.

Aumenta la leggibilità e modificabilità del programma.

Il C consente, ad esempio, di definire:

• tipi ridefiniti

• tipi enumerati

TIPO RIDEFINITO

Un nuovo identificatore di tipo viene dichiarato uguale ad un tipo già esistente:

typedef TipoEsistente NuovoTipo;

typedef int MioIntero;

MioIntero X,Y,Z;

int W;

(2)

TIPO ENUMERATO

Un tipo enumerato viene specificato tramite l’elenco dei valori che i dati di quel tipo possono assumere:

typedef enum {a1, a2, a3, ... , an} EnumType;

Sono tipi enumerabili:

il compilatore associa a ciascun identificatore del dominio un numero naturale, che viene utilizzato nella valutazione di espressioni, relazioni ed assegnamenti.

 stessa occupazione, stesso range e stessi operatori di int /* a1, a2, a3,..., an

usabili come costanti

*/

EnumType var1,var2;

var1 = a3;

ESEMPI:

typedef enum {lu, ma, me, gi, ve, sa, do}

Giorni;

typedef enum {cuori, picche, quadri, fiori}

Carte;

Carte C1, C2, C3, C4, C5;

Giorni Giorno;

if (Giorno == do) /* giorno festivo */

else /* giorno feriale */

L'utilizzo di tipi ottenuti per enumerazione rende più leggibile

il codice.

(3)

NOTE sui TIPI ENUMERATI

Un identificatore di un valore scalare definito dall’utente deve comparire nella definizione di un solo tipo enumerato.

typedef enum {lu, ma, me, gi, ve, sa, do}

Giorni;

typedef enum {lu, ma, me} PrimiGiorni;

scorretto

Un tipo enumerato è totalmente ordinato (Integral Type).

Su un dato di tipo enumerato sono applicabili tutti gli operatori relazionali:

lu < ma  vero lu >= sa  falso cuori < quadri  vero

E’ anche possibile specificare un valore naturale a cui associare i singoli simboli:

typedef enum {gen, feb, mar, ...} Mesi;

gen  0, feb  1, etc

typedef enum {gen=1, feb, mar, ...} Mesi;

gen  1, feb  2, etc

typedef enum {gen=1, feb=4, mar, ...} Mesi;

gen  1, feb  4, mar  5, etc ATTENZIONE:

Non c'è controllo sugli estremi dell'intervallo di interi

utilizzato!

(4)

IL TIPO BOOLEAN

È un tipo predefinito in altri linguaggi di programmazione Non è previsto in C, dove però:

• il valore 0 (zero) indica FALSO

• ogni valore diverso da 0 indica VERO Vengono considerati falsi:

0 '\0' 0.0 5-5 EOF

Vengono invece considerati veri:

5 'A' 2.353*2

Per definirlo anche in C:

typedef enum {false, true} Boolean;

Boolean flag1,flag2;

flag1 = true;

if (flag1) ... /* flag vale 1 */

flag2 = -37 /* !!! */

if(flag2) ... /* funziona lo stesso! */

(5)

EQUIVALENZA TRA TIPI DI DATO

Quando due oggetti hanno lo stesso tipo?

Equivalenza strutturale:

se si distingue tra i tipi in base alla loro struttura.

typedef int MioIntero;

typedef int NuovoIntero;

MioIntero A;

NuovoIntero B;

In questo caso, A e B hanno lo stesso tipo.

Equivalenza nominale:

due dati sono di tipo equivalente solo se compaiono nella stessa dichiarazione, oppure

se l’identificatore di tipo dell’uno è definito uguale all’identificatore di tipo dell’altro.

typedef int MioIntero;

typedef int NuovoIntero;

MioIntero A;

NuovoIntero B;

In questo caso, A e B vengono considerati di tipo diverso.

Può dipendere dalla implementazione del linguaggio.

In genere, in C vale l’equivalenza strutturale.

(6)

EQUIVALENZA DI TIPO IN C

Vale l’equivalenza strutturale typedef int tipo1;

typedef int tipo2;

Si possono quindi usare insieme variabili dei due tipi:

tipo1 v1;

tipo2 v2;

... v1 + v2 ...

(7)

UNICITÀ E ORDINE DI DEFINIZIONE DEGLI IDENTIFICATORI

Dichiarazioni di costanti, tipo, variabile e tipi enumerati associano a un identificatore una costante, un tipo o una variabile.

L’associazione dell’identificatore con l’oggetto che denota deve essere unica per tutto il suo campo di azione.

ESEMPIO

typedef char Intervallo;

Intervallo X, Y;

double Y, Z, Intervallo;

E’ scorretta perché i simboli Y e Intervallo

sono definiti due volte.

Regola:

La dichiarazione di un identificatore deve precederne l’uso.

const int Xmin=-Xmax;

Xmax=100; /* Scorretta! */

Riferimenti

Documenti correlati

Una volta inseriti i dati e confermato tramite l’apposito pulsante il sistema segnala l’avvenuto inserimento, oltre che con il messaggio di conferma, anche attraverso la

196/2003 (Codice Privacy), ovvero: raccolta, registrazione, organizzazione, conservazione, consultazione, elaborazione, modificazione, selezione, estrazione, raffronto,

Su modelli con l'applicazione Samsung Recovery, la capacità dell'HDD indicata su Windows potrebbe essere inferiore alla capacità reale in quanto l'applicazione Samsung Recovery

volontario con noi… - Collaborare all’organizzazione degli eventi - Proporre nuove attività o corsi da attivare - Pubblicizzare l’associazione e le sue attività. -

Entrando nella sezione del dettaglio di un singolo Dossier è possibile visualizzarne il titolo e la descrizione se precedentemente inseriti in fase di costruzione, il grafico

Completata la registrazione è possibile collegarsi a Servizi online inserendo utenza e password nella barra orizzontale e cliccare sulla voce: &#34;Consultazione

Quest’area è riservata agli utenti con profilo Amministratore centrale Profili/Strutture, che sono abilitati all’utilizzo di tutte e tre le funzionalità, oltre che agli

Per l’accesso al portale Servizi Lavoro al link https://servizi.lavoro.gov.it come Utente Estero è necessario anzitutto richiedere l’accreditamento del soggetto