Bästa svaret
Typkontroll görs av typkontrollen som verifierar att typen av konstruktion (konstant, variabel, matris, lista, objekt) matchar vad som förväntas i dess användningskontext. Detta säkerställer att vissa typer av programmeringsfel kommer att upptäckas och rapporteras. Till exempel överväga att följa uttryck som involverar moduloperatören 8\% 3.5 detta uttryck kommer att resultera i fel eftersom modulooperatören förväntar sig två heltal. Typkontrollern behöver veta om – Syntaktiska konstruktioner i språket (t.ex. operatorer) –Basiska språktyper (int, real) – Regler för att tilldela typer till konstruktioner t.ex. ”om båda operander av + är int, är resultatet int”
Det finns två typer av typkontroll Statisk och Dynamisk
Statisk typkontroll: Typkontroll utförd vid kompileringstid. När du använder dessa språk tvingas du deklarera typen av variabler innan du använder dem (kompilator behöver veta vilken datatyp variabeln tillhör). Tänk till exempel ett uttalande i c ++ int a = 10; här behöver kompilatorn veta datatypen för variabeln ”a” innan den används. Exempelvis C, C ++, JAVA, C # är några Statiskt skrivna språk
Dynamisk Typkontroll: Typkontroll utförd under körning. När du använder dessa språk behöver du inte ange eller deklarera typen av variabel istället kompilatorn själv räknar ut vilken typ en variabel är när du först tilldelar den ett värde. Tänk nu på några uttalanden i python: str = ”Python” str2 = 10 Här behöver du inte deklarera datatypen. Kompilatorn själv vet vilken typ variabeln tillhör när du först tilldelar den ett värde (str1 är av ”String” -datatyp och str2 är av typen ”int”). Exempelvis VBScript, Python är Dynamiskt skrivna språk.
Svar
Typkontroll testas för att se om operationen på variabler använder kompatibel typ. Olika språk har olika nivåer av variabel kompatibilitet. Starkt typkontrollerat språk har strikta regler för variabla typer i uttryck. På andra sidan myntet finns det språk som möjliggör blandning av olika typer. Dessa språk kommer att kompensera för blandade typer genom att använda vissa regler för variabla omvandlingar.
Till exempel på vissa stränga typspråk kan du bara lägga till två heltal eller två flyttal, men flagga ett fel om du försöker för att lägga till ett heltal till en flottör. På andra språk, om du lägger till ett heltal till en flottör kan det implicit konvertera heltalet till ett flottör och sedan utföra tillägget.
C ++ är någonstans i mitten. I C ++ tillåter det vissa implicita omvandlingar. C och C ++ har ett par kryphål. Först kallas casting. Casting berättar i grund och botten att kompilatorn har en variabel som ”denna typ” i motsats till det deklarerade värdet. Till exempel i exemplet ovan, om vi vill att flottören ska behandlas som ett int, kan vi kasta flottören till ett int.
Exempel: int x, a; flyta y, b;
b = x + y;
a = x + (int) y; eller så kanske du vill ha a = (int) (x + y);
Eftersom pekare vanligtvis skrivs kan vi använda casting för att få en struktur att se ut som en annan typ av struktur.
typedef struct {/ * medlemmar * /} A;
typedef struct {/ * medlemmar * /} B;
A axel;
B * bp;
bp = &ax; // Fel: olika typer av pekare!
bp = (B *) &ax; // definierar effektivt ett overlay A med B som en union
Med pekare finns det också ett tomrum * som är ett jokertecken. Tillåter användning där någon typ av pekare tillåts sådana mem-typfunktioner, t.ex. memcpy.