Risposta migliore
Il controllo del tipo viene eseguito dal controllo del tipo che verifica che il tipo di un costrutto (costante, variabile, matrice, elenco, oggetto) corrisponde a quanto previsto nel contesto di utilizzo. Ciò garantisce che determinati tipi di errori di programmazione vengano rilevati e segnalati. Ad esempio, si consideri la seguente espressione che coinvolge loperatore modulo 8\% 3.5 questa espressione risulterà in errore poiché loperatore modulo si aspetta due numeri interi. Il controllo di tipo deve essere informato su – Costrutti sintattici nel linguaggio (ad esempio, operatori) – Tipi di linguaggio di base (int, reale) – Regole per lassegnazione di tipi ai costrutti Ad esempio, “se entrambi gli operandi di + sono int, il risultato è int”
Esistono due tipi di controllo del tipo Statico e Dinamico
Controllo del tipo statico: Controllo del tipo eseguito in fase di compilazione. Quando si utilizzano questi linguaggi, si è obbligati a dichiarare il tipo di variabili prima di utilizzarli (compilatore deve sapere a quale tipo di dati appartiene la variabile). Si consideri ad esempio unistruzione in c ++ int a = 10; qui il compilatore ha bisogno di conoscere il tipo di dati della variabile “a” prima di usarlo. Ad esempio, C, C ++, JAVA, C # sono alcuni Linguaggi tipizzati staticamente
Dinamici Controllo del tipo: Controllo del tipo eseguito in fase di esecuzione. Quando si utilizzano questi linguaggi non è necessario specificare o dichiarare il tipo di variabile, invece il compilatore stesso capisce di che tipo è una variabile quando le si assegna per la prima volta un valore. Consideriamo ora alcune istruzioni in python: str = “Python” str2 = 10 Qui non è necessario dichiarare il tipo di dati. Il compilatore stesso saprà a quale tipo appartiene la variabile quando le si assegna per la prima volta un valore (str1 è di tipo di dati “String” e str2 è di tipo “int”). Ad esempio VBScript, Python sono linguaggi tipizzati dinamicamente.
Risposta
Il controllo del tipo sta testando per vedere se loperazione su le variabili utilizzano il tipo compatibile. Lingue diverse hanno diversi livelli di compatibilità delle variabili. Il linguaggio fortemente controllato ha regole rigide sui tipi di variabili nellespressione. Dallaltro lato della medaglia, ci sono lingue che consentono la miscelazione di diversi tipi. Questi linguaggi compenseranno in qualche modo i tipi misti utilizzando alcune regole di conversione delle variabili.
Ad esempio, in alcuni linguaggi di tipo rigoroso, puoi aggiungere solo due numeri interi o due numeri in virgola mobile ma segnalare un errore se provi per aggiungere un numero intero a un float. In altri linguaggi, se aggiungi un intero a un float, potrebbe implicitamente convertire lintero in un float e quindi eseguire laddizione.
C ++ è da qualche parte nel mezzo. In C ++ consente alcune conversioni implicite. C e C ++ hanno un paio di scappatoie. In primo luogo, si chiama casting. Il casting è fondamentalmente dire al compilatore di considerare una variabile come “questo tipo” invece del valore dichiarato. Ad esempio, nellesempio sopra, se vogliamo che il float venga trattato come un int, possiamo lanciare il float in un int.
Esempio: int x, a; float y, b;
b = x + y;
a = x + (int) y; oppure potresti volere a = (int) (x + y);
Dato che i puntatori sono generalmente digitati, possiamo usare il casting per far sembrare una struttura un altro tipo di struttura.
typedef struct {/ * members * /} A;
typedef struct {/ * members * /} B;
A ax;
B * bp;
bp = &ax; // Errore: diversi tipi di puntatori!
bp = (B *) &ax; // definisce efficacemente un overlay A con B come ununione
Con i puntatori cè anche un void * che è un puntatore jolly. Consente luso in cui è consentito qualsiasi tipo di puntatore come funzioni di tipo mem, ad es. memcpy.