Legjobb válasz
A típusellenőrzést a típusellenőrző végzi, amely ellenőrzi, hogy a konstrukció típusa (konstans, változó, tömb, lista, objektum) megegyezik a használati kontextusban elvárhatóval. Ez biztosítja bizonyos típusú programozási hibák észlelését és jelentését. Például vegye figyelembe a 8\% 3,5 modulo operátorral történő kifejezés követését, ez a kifejezés hibát eredményez, mivel a modulo operátor két egész számra számít. A típusellenőrnek tudnia kell – Szintaktikus konstrukciók a nyelvben (pl. Operátorok) – Alapvető nyelvtípusok (int, valós) – Típusok konstrukciókhoz rendelési szabályai Pl. “Ha a + mindkét operandus int, az eredmény int”
A típusellenőrzésnek két típusa van: Statikus és Dinamikus
Statikus típusellenőrzés: A típusellenőrzés fordítási időben történt. Ha ezeket a nyelveket használja, akkor kötelezővé kell tennie, hogy deklarálja a változók típusát használatuk előtt (fordító tudnia kell, hogy a változó melyik adattípusba tartozik). Vegyünk például egy állítást c ++ int a = 10; itt a fordítónak ismernie kell az “a” változó adattípusát, mielőtt használná. Pl. C, C ++, JAVA, C # néhány statikusan beírt nyelv
Dinamikus Típusellenőrzés: Típusellenőrzés futási időben történik. Ha ezeket a nyelveket használja, akkor nem kell megadnia vagy deklarálnia a változó típusát, ehelyett a fordító maga állapítja meg, hogy milyen típusú változó az, amikor először értéket rendel hozzá. Most vegyen figyelembe néhány állítást a pythonban: str = “Python” str2 = 10 Itt nem kell deklarálnia az adattípust. A fordító maga tudja, hogy a változó melyik típusba tartozik, amikor először ad hozzá értéket (az str1 “String” típusú, az str2 pedig az “int” típusú). Pl. A VBScript, a Python dinamikusan beírt nyelvek.
Válasz
A típusellenőrzés teszteli, hogy a változók kompatibilis típust használnak. A különböző nyelvek változó kompatibilitása különböző. Az erősen típusellenőrzött nyelv szigorú szabályokkal rendelkezik a változó típusokra vonatkozóan. Az érme másik oldalán olyan nyelvek találhatók, amelyek lehetővé teszik a különféle típusok keverését. Ezek a nyelvek néhányan kompenzálják a vegyes típusokat a változó konverziók egyes szabályainak használatával.
Például néhány szigorú típusú nyelvben csak két egész számot vagy két lebegőpontos számot adhat hozzá, de hibát jelezhet, ha megpróbálja egész szám hozzáadásához az úszóhoz. Más nyelveken, ha egész számot ad egy úszóhoz, az implicit módon lebegővé alakíthatja az egész számot, majd elvégezheti az összeadást.
A C ++ valahol a közepén van. A C ++ – ban igenis implicit konverziókat tesz lehetővé. A C és a C ++ -nak van egy pár kiskapuja. Először castingnak hívják. A casting alapvetően azt mondja a fordítónak, hogy egy változó „ez a típus” legyen, szemben a deklarált értékkel. Például a fenti példában, ha azt akarjuk, hogy az úszó int-ként kezelje, akkor az úszót int-nek vethetjük.
Példa: int x, a; lebeg y, b;
b = x + y;
a = x + (int) y; vagy érdemes a = (int) (x + y);
Mivel a mutatókat általában beírják, az öntéssel használhatjuk az egyik struktúra más típusú struktúrának való megjelenését.
typedef struct {/ * tagok * /} A;
typedef struct {/ * tagok * /} B;
A fejsze;
B * bp;
bp = &ax; // Hiba: különböző típusú mutatók!
bp = (B *) &ax; // hatékonyan definiálja az A fedvényt B-vel, mint egy uniót.
A mutatókkal egy üresség * is szerepel, amely helyettesítő karakter. Lehetővé teszi a felhasználást, ahol bármilyen típusú mutató engedélyezett, ilyen mem típusú függvények, pl. memcpy.