Beste svaret
Typekontroll gjøres av typekontrollen som verifiserer at typen konstruksjon (konstant, variabel, matrise, liste, objekt) samsvarer med det som forventes i brukssammenheng. Dette sikrer at visse typer programmeringsfeil blir oppdaget og rapportert. For eksempel vurdere å følge uttrykk som involverer moduloperatør 8\% 3.5 dette uttrykket vil føre til feil da modulooperatør forventer to heltall. Type checker trenger å vite om – Syntaktiske konstruksjoner i språk (f.eks. Operatorer) –Grunnleggende typer språk (int, real) – Regler for tildeling av typer til konstruksjoner F.eks. «Hvis begge operandene på + er int, er resultatet int» p>
Det er to typer typekontroll Statisk og Dynamisk
Kontroll av statisk type: Typekontroll utført på kompileringstid. Når du bruker disse språkene, blir du tvunget til å erklære typen variabler før du bruker dem (kompilator trenger å vite hvilken datatype tilhører variabelen). For eksempel vurdere en uttalelse i c ++ int a = 10; her må kompilatoren vite datatypen til variabelen «a» før den brukes. F.eks., C, C ++, JAVA, C # er noen Statisk typede språk
Dynamisk Typekontroll: Typekontroll utført på kjøretid. Når du bruker disse språkene, trenger du ikke spesifisere eller erklære typen variabel i stedet for kompilatoren selv å finne ut hvilken type en variabel er når du først tildeler den en verdi. Vurder nå noen uttalelser i python: str = «Python» str2 = 10 Her trenger du ikke å oppgi datatypen. Kompilatoren selv vet hvilken type variabelen tilhører når du først tildeler den en verdi (str1 er av «String» datatype og str2 er av typen «int»). F.eks. VBScript, Python er Dynamisk typte språk.
Svar
Typekontroll testes for å se om operasjonen på variabler bruker kompatibel type. Ulike språk har forskjellige nivåer av variabel kompatibilitet. Sterkt typekontrollert språk har strenge regler for variable typer i uttrykk. På den andre siden av mynten er det språk som tillater blanding av forskjellige typer. Disse språkene vil kompensere for blandede typer ved å bruke noen regler for variable konverteringer.
For eksempel i noen strenge typespråk kan du bare legge til to heltall eller to flytende tall, men flagge en feil hvis du prøver for å legge til et heltall i en flottør. På andre språk, hvis du legger til et heltall i en flottør, kan det implisitt konvertere heltallet til en flottør og deretter utføre tillegget.
C ++ er et sted i midten. I C ++ tillater det noen implisitte konverteringer. C og C ++ har et par smutthull. Først kalles casting. Casting forteller i utgangspunktet kompilatoren om en variabel som «denne typen» i motsetning til den deklarerte verdien. For eksempel i eksemplet ovenfor, hvis vi vil at flottøren skal behandles som en int, kan vi kaste flottøren til en int.
Eksempel: int x, a; flyte y, b;
b = x + y;
a = x + (int) y; eller kanskje du vil ha a = (int) (x + y);
Siden pekere vanligvis er skrevet, kan vi bruke casting for å få en struktur til å ligne en annen type struktur.
typedef struct {/ * members * /} A;
typedef struct {/ * members * /} B;
A ax;
B * bp;
bp = &ax; // Feil: forskjellige typer pekere!
bp = (B *) &ax; // definerer effektivt et overlegg A med B som en union
Med pekere er det også et tomrom * som er et jokertegn. Tillater bruk der en hvilken som helst type peker er tillatt, slik mem-type funksjoner, f.eks. memcpy.