Bedste svar
Typekontrol udføres af typekontrollen, der verificerer, at typen af en konstruktion (konstant, variabel, matrix, liste, objekt) matcher, hvad der forventes i dets brugskontekst. Dette sikrer, at visse typer programmeringsfejl opdages og rapporteres. Overvej f.eks. At følge udtryk, der involverer modulo-operator 8\% 3.5, dette udtryk vil resultere i fejl, da modulo-operator forventer to heltal. Typekontrol skal vide om – Syntaktiske konstruktioner i sprog (f.eks. Operatorer) –Basiske sprogtyper (int, real) – Regler for tildeling af typer til konstruktioner F.eks. “Hvis begge operander af + er int, er resultatet int”
Der er to typer typekontrol Statisk og Dynamisk
Kontrol af statisk type: Typekontrol udført på kompileringstid. Når du bruger disse sprog, er du tvunget til at erklære typen af variabler, før du bruger dem (compiler skal vide, hvilken datatype variablen tilhører). For eksempel overveje en sætning i c ++ int a = 10; her skal kompilatoren kende datatypen for variablen “a”, før den bruges. F.eks. Er C, C ++, JAVA, C # nogle Statisk typede sprog
Dynamisk Typekontrol: Typekontrol udført på kørselstid. Når du bruger disse sprog, behøver du ikke angive eller erklære typen af variabel i stedet for kompilatoren selv, hvilken type en variabel er, når du først tildeler den en værdi. Overvej nu nogle udsagn i python: str = “Python” str2 = 10 Her behøver du ikke at erklære datatypen. Kompilatoren ved selv, hvilken type variablen tilhører, når du først tildeler den en værdi (str1 er af “String” -datatype og str2 er af typen “int”). F.eks. VBScript, Python er Dynamisk typede sprog.
Svar
Typekontrol testes for at se, om operationen på variabler bruger kompatibel type. Forskellige sprog har forskellige niveauer af variabel kompatibilitet. Stærkt typekontrolleret sprog har strenge regler for variable typer i udtryk. På den anden side af mønten er der sprog, der tillader blanding af forskellige typer. Disse sprog kompenserer for blandede typer ved hjælp af nogle regler for variable konverteringer.
For eksempel på nogle strenge typesprog kan du kun tilføje to heltal eller to flydende numre, men markere en fejl, hvis du prøver for at tilføje et heltal til en float. På andre sprog, hvis du føjer et heltal til en float, kan det implicit konvertere heltalet til en float og derefter udføre tilføjelsen.
C ++ er et sted i midten. I C ++ tillader det nogle implicitte konverteringer. C og C ++ har et par smuthuller. For det første kaldes casting. Casting fortæller grundlæggende kompilatoren om ting af en variabel som “denne type” i modsætning til den deklarerede værdi. For eksempel i eksemplet ovenfor, hvis vi ønsker, at float skal behandles som en int, kan vi kaste float til en int.
Eksempel: int x, a; flyde y, b;
b = x + y;
a = x + (int) y; eller du vil måske have a = (int) (x + y);
Da markører generelt er skrevet, kan vi bruge casting til at få en struktur til at ligne en anden type struktur.
typedef struct {/ * members * /} A;
typedef struct {/ * members * /} B;
A ax;
B * bp;
bp = &ax; // Fejl: forskellige typer markører!
bp = (B *) &ax; // definerer effektivt et overlay A med B som en union
Med markører er der også et tomrum *, som er et jokertegn. Tillader brug, hvor en hvilken som helst type markør er tilladt, sådanne mem-type funktioner, f.eks memcpy.