Cel mai bun răspuns
Verificarea tipului se face prin verificatorul de tip care verifică dacă tipul unei construcții (constantă, variabilă, matrice, listă, obiect) se potrivește cu ceea ce se așteaptă în contextul său de utilizare. Acest lucru asigură că anumite tipuri de erori de programare vor fi detectate și raportate. De exemplu, luați în considerare următoarea expresie care implică operatorul modulo 8\% 3,5, această expresie va avea ca rezultat o eroare deoarece operatorul modulo așteaptă două numere întregi. Verificatorul de tip trebuie să știe despre – Construcții sintactice în limbaj (de exemplu, operatori) –Tipuri de bază de limbaj (int, real) – Reguli pentru atribuirea tipurilor de constructe De exemplu, „dacă ambii operanzi ai + sunt int, rezultatul este int”
Există două tipuri de verificare a tipului Static și Dinamic
Verificare tipică statică: Verificarea tipului efectuată la compilare. Când utilizați aceste limbi, sunteți obligat să declarați tipul de variabile înainte de a le utiliza (compilator trebuie să știe cărui tip de date îi aparține variabila). De exemplu, considerați o afirmație în c ++ int a = 10; aici compilatorul trebuie să cunoască tipul de date al variabilei „a” înainte de ao utiliza. De exemplu, C, C ++, JAVA, C # sunt unele Limbaje tipizate static
Dinamic Verificarea tipului: Verificarea tipului efectuată în timpul rulării. Când utilizați aceste limbi, nu trebuie să specificați sau să declarați tipul de variabilă, în schimb compilatorul însuși își dă seama ce tip este o variabilă atunci când îi atribuiți prima o valoare. Acum luați în considerare câteva afirmații în python: str = „Python” str2 = 10 Aici nu trebuie să declarați tipul de date. Compilatorul în sine va ști la ce tip aparține variabila atunci când îi atribuiți pentru prima dată o valoare (str1 este de tip „String” și str2 este de tip „int”). De exemplu, VBScript, Python sunt Limbaje tastate dinamic.
Răspuns
Verificarea tipului este testată pentru a vedea dacă operația de pe variabilele utilizează un tip compatibil. Diferite limbi au niveluri diferite de compatibilitate variabilă. Limbajul puternic verificat are reguli stricte privind tipurile variabile în expresie. Pe cealaltă față a monedei, există limbi care permit amestecarea diferitelor tipuri. Aceste limbi vor compensa unele tipuri mixte utilizând unele reguli de conversie variabilă.
De exemplu, în unele limbi de tip strict, puteți adăuga doar două numere întregi sau două numere în virgulă mobilă, dar semnalizați o eroare dacă încercați pentru a adăuga un număr întreg la un plutitor. În alte limbi, dacă adăugați un număr întreg la un float, acesta ar putea converti implicit întregul la un float și apoi să efectueze adăugarea.
C ++ este undeva la mijloc. În C ++ permite conversii implicite. C și C ++ au câteva lacune. În primul rând, se numește casting. Distribuția înseamnă în esență compilatorului o variabilă ca „acest tip” spre deosebire de valoarea declarată. De exemplu, în exemplul de mai sus, dacă dorim ca float-ul să fie tratat ca un int, putem arunca float-ul într-un int.
Exemplu: int x, a; float y, b;
b = x + y;
a = x + (int) y; sau s-ar putea să doriți un = (int) (x + y);
Deoarece indicii sunt în general tastate, putem folosi castingul pentru a face ca o structură să arate ca un alt tip de structură.
typedef struct {/ * members * /} A;
typedef struct {/ * members * /} B;
A ax;
B * bp;
bp = &ax; // Eroare: diferite tipuri de indicatori!
bp = (B *) &ax; // definește în mod eficient o suprapunere A cu B ca o uniune
Cu indicatorii există și un gol * care este un indicator cu metacaracter. Permite utilizarea în cazul în care orice tip de pointer este permis astfel de funcții de tip mem, de ex. memcpy.